#ifndef RESOURCE_H
#define RESOURCE_H 1
#include "misc.h"
#include "dixaccess.h"
typedef unsigned long RESTYPE;
#define RC_VANILLA ((RESTYPE)0)
#define RC_CACHED ((RESTYPE)1<<31)
#define RC_DRAWABLE ((RESTYPE)1<<30)
#define RC_NEVERRETAIN ((RESTYPE)1<<29)
#define RC_LASTPREDEF RC_NEVERRETAIN
#define RC_ANY (~(RESTYPE)0)
#define RT_WINDOW ((RESTYPE)1|RC_DRAWABLE)
#define RT_PIXMAP ((RESTYPE)2|RC_DRAWABLE)
#define RT_GC ((RESTYPE)3)
#undef RT_FONT
#undef RT_CURSOR
#define RT_FONT ((RESTYPE)4)
#define RT_CURSOR ((RESTYPE)5)
#define RT_COLORMAP ((RESTYPE)6)
#define RT_CMAPENTRY ((RESTYPE)7)
#define RT_OTHERCLIENT ((RESTYPE)8|RC_NEVERRETAIN)
#define RT_PASSIVEGRAB ((RESTYPE)9|RC_NEVERRETAIN)
#define RT_LASTPREDEF ((RESTYPE)9)
#define RT_NONE ((RESTYPE)0)
#define RESOURCE_AND_CLIENT_COUNT 29
#if MAXCLIENTS == 64
#define RESOURCE_CLIENT_BITS 6
#endif
#if MAXCLIENTS == 128
#define RESOURCE_CLIENT_BITS 7
#endif
#if MAXCLIENTS == 256
#define RESOURCE_CLIENT_BITS 8
#endif
#if MAXCLIENTS == 512
#define RESOURCE_CLIENT_BITS 9
#endif
#define CLIENTOFFSET (RESOURCE_AND_CLIENT_COUNT - RESOURCE_CLIENT_BITS)
#define RESOURCE_ID_MASK ((1 << CLIENTOFFSET) - 1)
#define RESOURCE_CLIENT_MASK (((1 << RESOURCE_CLIENT_BITS) - 1) << CLIENTOFFSET)
#define CLIENT_BITS(id) ((id) & RESOURCE_CLIENT_MASK)
#define CLIENT_ID(id) ((int)(CLIENT_BITS(id) >> CLIENTOFFSET))
#define SERVER_BIT (Mask)0x40000000
#ifdef INVALID
#undef INVALID
#endif
#define INVALID (0)
#define BAD_RESOURCE 0xe0000000
#define rClient(obj) (clients[CLIENT_ID((obj)->resource)])
extern _X_EXPORT CallbackListPtr ResourceStateCallback;
typedef enum {ResourceStateAdding,
ResourceStateFreeing} ResourceState;
typedef struct {
ResourceState state;
XID id;
RESTYPE type;
pointer value;
} ResourceStateInfoRec;
typedef int (*DeleteType)(
pointer ,
XID );
typedef void (*FindResType)(
pointer ,
XID ,
pointer );
typedef void (*FindAllRes)(
pointer ,
XID ,
RESTYPE ,
pointer );
typedef Bool (*FindComplexResType)(
pointer ,
XID ,
pointer );
extern _X_EXPORT RESTYPE CreateNewResourceType(
DeleteType , char * );
extern _X_EXPORT void SetResourceTypeErrorValue(
RESTYPE , int );
extern _X_EXPORT RESTYPE CreateNewResourceClass(void);
extern _X_EXPORT Bool InitClientResources(
ClientPtr );
extern _X_EXPORT XID FakeClientID(
int );
#ifdef __APPLE__
#define AddResource Darwin_X_AddResource
#endif
extern _X_EXPORT Bool AddResource(
XID ,
RESTYPE ,
pointer );
extern _X_EXPORT void FreeResource(
XID ,
RESTYPE );
extern _X_EXPORT void FreeResourceByType(
XID ,
RESTYPE ,
Bool );
extern _X_EXPORT Bool ChangeResourceValue(
XID ,
RESTYPE ,
pointer );
extern _X_EXPORT void FindClientResourcesByType(
ClientPtr ,
RESTYPE ,
FindResType ,
pointer );
extern _X_EXPORT void FindAllClientResources(
ClientPtr ,
FindAllRes ,
pointer );
extern _X_EXPORT void FreeClientNeverRetainResources(
ClientPtr );
extern _X_EXPORT void FreeClientResources(
ClientPtr );
extern _X_EXPORT void FreeAllResources(void);
extern _X_EXPORT Bool LegalNewID(
XID ,
ClientPtr );
extern _X_EXPORT pointer LookupClientResourceComplex(
ClientPtr client,
RESTYPE type,
FindComplexResType func,
pointer cdata);
extern _X_EXPORT int dixLookupResourceByType(
pointer *result,
XID id,
RESTYPE rtype,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT int dixLookupResourceByClass(
pointer *result,
XID id,
RESTYPE rclass,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT void GetXIDRange(
int ,
Bool ,
XID * ,
XID * );
extern _X_EXPORT unsigned int GetXIDList(
ClientPtr ,
unsigned int ,
XID * );
extern _X_EXPORT RESTYPE lastResourceType;
extern _X_EXPORT RESTYPE TypeMask;
extern _X_EXPORT pointer SecurityLookupIDByType(
ClientPtr client,
XID id,
RESTYPE rtype,
Mask access_mode) _X_DEPRECATED;
extern _X_EXPORT pointer SecurityLookupIDByClass(
ClientPtr client,
XID id,
RESTYPE classes,
Mask access_mode) _X_DEPRECATED;
extern _X_EXPORT pointer LookupIDByType(
XID id,
RESTYPE rtype) _X_DEPRECATED;
extern _X_EXPORT pointer LookupIDByClass(
XID id,
RESTYPE classes) _X_DEPRECATED;
#endif