Moved to a plugin.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@888 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
e269aeaf16
commit
5f88d761f5
9 changed files with 0 additions and 10342 deletions
205
engine/qux/Xmd.h
205
engine/qux/Xmd.h
|
@ -1,205 +0,0 @@
|
|||
/* $XFree86: xc/include/Xmd.h,v 3.16 2002/05/31 18:45:39 dawes Exp $ */
|
||||
/***********************************************************
|
||||
|
||||
Copyright 1987, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Digital not be
|
||||
used in advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
|
||||
******************************************************************/
|
||||
#ifndef XMD_H
|
||||
#define XMD_H 1
|
||||
/* $Xorg: Xmd.h,v 1.4 2001/02/09 02:03:22 xorgcvs Exp $ */
|
||||
/*
|
||||
* Xmd.h: MACHINE DEPENDENT DECLARATIONS.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Special per-machine configuration flags.
|
||||
*/
|
||||
#ifdef CRAY
|
||||
#define WORD64 /* 64-bit architecture */
|
||||
#endif
|
||||
#if defined(__alpha) || defined(__alpha__) || \
|
||||
defined(__ia64__) || defined(ia64) || \
|
||||
defined(__sparc64__) || \
|
||||
defined(__s390x__) || \
|
||||
(defined(__hppa__) && defined(__LP64__)) || \
|
||||
defined(__x86_64__) || defined(x86_64)
|
||||
#define LONG64 /* 32/64-bit architecture */
|
||||
#endif
|
||||
#ifdef __sgi
|
||||
#if (_MIPS_SZLONG == 64)
|
||||
#define LONG64
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Stuff to handle large architecture machines; the constants were generated
|
||||
* on a 32-bit machine and must coorespond to the protocol.
|
||||
*/
|
||||
#ifdef WORD64
|
||||
#define MUSTCOPY
|
||||
#endif /* WORD64 */
|
||||
|
||||
|
||||
/*
|
||||
* Definition of macro used to set constants for size of network structures;
|
||||
* machines with preprocessors that can't handle all of the sz_ symbols
|
||||
* can define this macro to be sizeof(x) if and only if their compiler doesn't
|
||||
* pad out structures (esp. the xTextElt structure which contains only two
|
||||
* one-byte fields). Network structures should always define sz_symbols.
|
||||
*
|
||||
* The sz_ prefix is used instead of something more descriptive so that the
|
||||
* symbols are no more than 32 characters long (which causes problems for some
|
||||
* compilers and preprocessors).
|
||||
*
|
||||
* The extra indirection in the __STDC__ case is to get macro arguments to
|
||||
* expand correctly before the concatenation, rather than afterward.
|
||||
*/
|
||||
#if ((defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)) && !defined(UNIXCPP)) || defined(ANSICPP)
|
||||
#define _SIZEOF(x) sz_##x
|
||||
#define SIZEOF(x) _SIZEOF(x)
|
||||
#else
|
||||
#define SIZEOF(x) sz_/**/x
|
||||
#endif /* if ANSI C compiler else not */
|
||||
|
||||
/*
|
||||
* Bitfield suffixes for the protocol structure elements, if you
|
||||
* need them. Note that bitfields are not guarranteed to be signed
|
||||
* (or even unsigned) according to ANSI C.
|
||||
*/
|
||||
#ifdef WORD64
|
||||
typedef long INT64;
|
||||
typedef unsigned long CARD64;
|
||||
#define B32 :32
|
||||
#define B16 :16
|
||||
#ifdef UNSIGNEDBITFIELDS
|
||||
typedef unsigned int INT32;
|
||||
typedef unsigned int INT16;
|
||||
#else
|
||||
#ifdef __STDC__
|
||||
typedef signed int INT32;
|
||||
typedef signed int INT16;
|
||||
#else
|
||||
typedef int INT32;
|
||||
typedef int INT16;
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#define B32
|
||||
#define B16
|
||||
#ifdef LONG64
|
||||
typedef long INT64;
|
||||
typedef int INT32;
|
||||
#else
|
||||
typedef long INT32;
|
||||
#endif
|
||||
typedef short INT16;
|
||||
#endif
|
||||
|
||||
#if defined(__STDC__) || defined(sgi) || defined(AIXV3)
|
||||
typedef signed char INT8;
|
||||
#else
|
||||
typedef char INT8;
|
||||
#endif
|
||||
|
||||
#ifdef LONG64
|
||||
typedef unsigned long CARD64;
|
||||
typedef unsigned int CARD32;
|
||||
#else
|
||||
typedef unsigned long CARD32;
|
||||
#endif
|
||||
typedef unsigned short CARD16;
|
||||
typedef unsigned char CARD8;
|
||||
|
||||
typedef CARD32 BITS32;
|
||||
typedef CARD16 BITS16;
|
||||
|
||||
#if !defined(I_NEED_OS2_H) && !defined(_WIN32)
|
||||
typedef CARD8 BYTE;
|
||||
typedef CARD8 BOOL;
|
||||
#else
|
||||
#define BYTE CARD8
|
||||
#define BOOL CARD8
|
||||
#endif
|
||||
|
||||
/*
|
||||
* definitions for sign-extending bitfields on 64-bit architectures
|
||||
*/
|
||||
#if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
|
||||
#define cvtINT8toInt(val) (((val) & 0x00000080) ? ((val) | 0xffffffffffffff00) : (val))
|
||||
#define cvtINT16toInt(val) (((val) & 0x00008000) ? ((val) | 0xffffffffffff0000) : (val))
|
||||
#define cvtINT32toInt(val) (((val) & 0x80000000) ? ((val) | 0xffffffff00000000) : (val))
|
||||
#define cvtINT8toShort(val) cvtINT8toInt(val)
|
||||
#define cvtINT16toShort(val) cvtINT16toInt(val)
|
||||
#define cvtINT32toShort(val) cvtINT32toInt(val)
|
||||
#define cvtINT8toLong(val) cvtINT8toInt(val)
|
||||
#define cvtINT16toLong(val) cvtINT16toInt(val)
|
||||
#define cvtINT32toLong(val) cvtINT32toInt(val)
|
||||
#else
|
||||
#define cvtINT8toInt(val) (val)
|
||||
#define cvtINT16toInt(val) (val)
|
||||
#define cvtINT32toInt(val) (val)
|
||||
#define cvtINT8toShort(val) (val)
|
||||
#define cvtINT16toShort(val) (val)
|
||||
#define cvtINT32toShort(val) (val)
|
||||
#define cvtINT8toLong(val) (val)
|
||||
#define cvtINT16toLong(val) (val)
|
||||
#define cvtINT32toLong(val) (val)
|
||||
#endif /* WORD64 and UNSIGNEDBITFIELDS */
|
||||
|
||||
|
||||
|
||||
#ifdef MUSTCOPY
|
||||
/*
|
||||
* This macro must not cast or else pointers will get aligned and be wrong
|
||||
*/
|
||||
#define NEXTPTR(p,t) (((char *) p) + SIZEOF(t))
|
||||
#else /* else not MUSTCOPY, this is used for 32-bit machines */
|
||||
/*
|
||||
* this version should leave result of type (t *), but that should only be
|
||||
* used when not in MUSTCOPY
|
||||
*/
|
||||
#define NEXTPTR(p,t) (((t *)(p)) + 1)
|
||||
#endif /* MUSTCOPY - used machines whose C structs don't line up with proto */
|
||||
|
||||
#endif /* XMD_H */
|
2132
engine/qux/Xproto.h
2132
engine/qux/Xproto.h
File diff suppressed because it is too large
Load diff
|
@ -1,80 +0,0 @@
|
|||
//the only changes in this file for qux support are with header file locations.
|
||||
|
||||
/* $Xorg: Xprotostr.h,v 1.4 2001/02/09 02:03:23 xorgcvs Exp $ */
|
||||
#ifndef XPROTOSTRUCTS_H
|
||||
#define XPROTOSTRUCTS_H
|
||||
|
||||
/***********************************************************
|
||||
|
||||
Copyright 1987, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Digital not be
|
||||
used in advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
|
||||
******************************************************************/
|
||||
#include "Xmd.h"
|
||||
|
||||
/* Used by PolySegment */
|
||||
|
||||
typedef struct _xSegment {
|
||||
INT16 x1 B16, y1 B16, x2 B16, y2 B16;
|
||||
} xSegment;
|
||||
|
||||
/* POINT */
|
||||
|
||||
typedef struct _xPoint {
|
||||
INT16 x B16, y B16;
|
||||
} xPoint;
|
||||
|
||||
typedef struct _xRectangle {
|
||||
INT16 x B16, y B16;
|
||||
CARD16 width B16, height B16;
|
||||
} xRectangle;
|
||||
|
||||
/* ARC */
|
||||
|
||||
typedef struct _xArc {
|
||||
INT16 x B16, y B16;
|
||||
CARD16 width B16, height B16;
|
||||
INT16 angle1 B16, angle2 B16;
|
||||
} xArc;
|
||||
|
||||
#endif /* XPROTOSTRUCTS_H */
|
|
@ -1,63 +0,0 @@
|
|||
/* $Xorg: bigreqstr.h,v 1.4 2001/02/09 02:03:24 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright 1992, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
#define X_BigReqEnable 0
|
||||
|
||||
#define XBigReqNumberEvents 0
|
||||
|
||||
#define XBigReqNumberErrors 0
|
||||
|
||||
#define XBigReqExtensionName "BIG-REQUESTS"
|
||||
|
||||
typedef struct {
|
||||
CARD8 reqType; /* always XBigReqCode */
|
||||
CARD8 brReqType; /* always X_BigReqEnable */
|
||||
CARD16 length B16;
|
||||
} xBigReqEnableReq;
|
||||
#define sz_xBigReqEnableReq 4
|
||||
|
||||
typedef struct {
|
||||
BYTE type; /* X_Reply */
|
||||
CARD8 pad0;
|
||||
CARD16 sequenceNumber B16;
|
||||
CARD32 length B32;
|
||||
CARD32 max_request_size B32;
|
||||
CARD32 pad1 B32;
|
||||
CARD32 pad2 B32;
|
||||
CARD32 pad3 B32;
|
||||
CARD32 pad4 B32;
|
||||
CARD32 pad5 B32;
|
||||
} xBigReqEnableReply;
|
||||
#define sz_xBigReqEnableReply 32
|
||||
|
||||
|
||||
typedef struct {
|
||||
CARD8 reqType;
|
||||
CARD8 data;
|
||||
CARD16 zero B16;
|
||||
CARD32 length B32;
|
||||
} xBigReq;
|
File diff suppressed because it is too large
Load diff
1845
engine/qux/m_x.c
1845
engine/qux/m_x.c
File diff suppressed because it is too large
Load diff
170
engine/qux/qux.h
170
engine/qux/qux.h
|
@ -1,170 +0,0 @@
|
|||
#ifdef _WIN32 //for multithreaded reading
|
||||
#define BOOL WINDOWSSUCKS_BOOL
|
||||
#define INT32 WINDOWSSUCKS_INT32
|
||||
#include "winquake.h"
|
||||
#undef BOOL
|
||||
#undef INT32
|
||||
|
||||
#define MULTITHREADWIN32
|
||||
#endif
|
||||
|
||||
#ifdef MULTITHREADWIN32
|
||||
#define MULTITHREAD
|
||||
#endif
|
||||
|
||||
#include "Xproto.h"
|
||||
#include "x.h"
|
||||
|
||||
#include "bigreqstr.h"
|
||||
|
||||
#define XK_MISCELLANY
|
||||
#define XK_LATIN1
|
||||
#include "keysymdef.h"
|
||||
|
||||
typedef struct xclient_s {
|
||||
int socket;
|
||||
int inbufferlen;
|
||||
int outbufferlen;
|
||||
int inbuffermaxlen;
|
||||
int outbuffermaxlen;
|
||||
char *outbuffer;
|
||||
char *inbuffer;
|
||||
qboolean tobedropped; //dropped when no more to send.
|
||||
qboolean stillinitialising;
|
||||
unsigned int requestnum;
|
||||
unsigned int ridbase;
|
||||
struct xclient_s *nextclient;
|
||||
|
||||
#ifdef MULTITHREADWIN32
|
||||
HANDLE threadhandle;
|
||||
CRITICAL_SECTION delecatesection;
|
||||
#endif
|
||||
} xclient_t;
|
||||
|
||||
extern xclient_t *xgrabbedclient; //stops reading other clients
|
||||
extern xclient_t *xpointergrabclient;
|
||||
|
||||
typedef struct xproperty_s {
|
||||
Atom atomid;
|
||||
Atom type;
|
||||
int datalen;
|
||||
struct xproperty_s *next;
|
||||
int format;
|
||||
char data[1];
|
||||
} xproperty_t;
|
||||
|
||||
typedef struct xnotificationmask_s {
|
||||
xclient_t *client;
|
||||
unsigned int mask;
|
||||
struct xnotificationmask_s *next;
|
||||
} xnotificationmask_t;
|
||||
|
||||
typedef struct xresource_s {
|
||||
enum {x_none, x_window, x_gcontext, x_pixmap, x_atom} restype;
|
||||
int id;
|
||||
xclient_t *owner;
|
||||
|
||||
struct xresource_s *next, *prev;
|
||||
} xresource_t;
|
||||
typedef struct xpixmap_s {
|
||||
xresource_t res;
|
||||
|
||||
int references;
|
||||
qboolean linked;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
int depth;
|
||||
|
||||
qbyte *data;
|
||||
} xpixmap_t;
|
||||
typedef struct xatom_s {
|
||||
xresource_t res;
|
||||
char atomname[1];
|
||||
int selectionownerwindowid;
|
||||
xclient_t *selectionownerclient;
|
||||
} xatom_t;
|
||||
typedef struct xwindow_s {
|
||||
xresource_t res;
|
||||
|
||||
int xpos;
|
||||
int ypos;
|
||||
int width;
|
||||
int height;
|
||||
char *buffer;
|
||||
int bg;
|
||||
struct xwindow_s *parent;
|
||||
struct xwindow_s *child;
|
||||
struct xwindow_s *sibling;
|
||||
|
||||
xpixmap_t *backpixmap;
|
||||
unsigned int backpixel;
|
||||
unsigned int borderpixel;
|
||||
int bitgravity, wingravity;
|
||||
unsigned int donotpropagate;
|
||||
int colormap;
|
||||
|
||||
qboolean mapped;
|
||||
qboolean overrideredirect;
|
||||
|
||||
qboolean inputonly;
|
||||
|
||||
int depth;
|
||||
|
||||
xproperty_t *properties;
|
||||
xnotificationmask_t *notificationmask;
|
||||
} xwindow_t;
|
||||
|
||||
typedef struct xgcontext_s
|
||||
{
|
||||
xresource_t res;
|
||||
int depth;
|
||||
|
||||
int function;
|
||||
int fgcolour;
|
||||
int bgcolour;
|
||||
} xgcontext_t;
|
||||
|
||||
extern xwindow_t *rootwindow;
|
||||
extern qboolean xrefreshed; //something onscreen changed.
|
||||
|
||||
int XS_GetResource(int id, void **data);
|
||||
void XS_SetProperty(xwindow_t *wnd, Atom atomid, Atom atomtype, char *data, int datalen, int format);
|
||||
int XS_GetProperty(xwindow_t *wnd, Atom atomid, Atom *type, char *output, int maxlen, int offset, int *extrabytes, int *format);
|
||||
void XS_DeleteProperty(xwindow_t *wnd, Atom atomid);
|
||||
xatom_t *XS_CreateAtom(Atom atomid, char *name, xclient_t *owner);
|
||||
Atom XS_FindAtom(char *name);
|
||||
xgcontext_t *XS_CreateGContext(int id, xclient_t *owner, xresource_t *drawable);
|
||||
int XS_NewResource(void);
|
||||
xwindow_t *XS_CreateWindow(int wid, xclient_t *owner, xwindow_t *parent, short x, short y, short width, short height);
|
||||
void XS_SetParent(xwindow_t *wnd, xwindow_t *parent);
|
||||
xpixmap_t *XS_CreatePixmap(int id, xclient_t *owner, int width, int height, int depth);
|
||||
void XS_CreateInitialResources(void);
|
||||
void XS_DestroyResource(xresource_t *res);
|
||||
void XS_DestroyResourcesOfClient(xclient_t *cl);
|
||||
void XS_CheckResourceSentinals(void);
|
||||
|
||||
|
||||
void XW_ExposeWindow(xwindow_t *root, int x, int y, int width, int height);
|
||||
void XW_ClearArea(xwindow_t *wnd, int xp, int yp, int width, int height);
|
||||
|
||||
|
||||
|
||||
typedef void (*XRequest) (xclient_t *cl, xReq *request);
|
||||
extern XRequest XRequests [256];
|
||||
|
||||
void X_SendData(xclient_t *cl, void *data, int datalen);
|
||||
void X_SendNotification(xEvent *data);
|
||||
int X_SendNotificationMasked(xEvent *data, xwindow_t *window, unsigned int mask);
|
||||
qboolean X_NotifcationMaskPresent(xwindow_t *window, int mask, xclient_t *notfor);
|
||||
void X_SendError(xclient_t *cl, int errorcode, int assocresource, int major, int minor);
|
||||
void X_InitRequests(void);
|
||||
|
||||
void X_EvalutateCursorOwner(int movemode);
|
||||
void X_EvalutateFocus(int movemode);
|
||||
|
||||
|
||||
extern qbyte *xscreen;
|
||||
extern short xscreenwidth;
|
||||
extern short xscreenheight;
|
||||
|
3268
engine/qux/x_reqs.c
3268
engine/qux/x_reqs.c
File diff suppressed because it is too large
Load diff
|
@ -1,563 +0,0 @@
|
|||
#include "quakedef.h"
|
||||
|
||||
#ifndef NOMEDIA
|
||||
|
||||
#include "qux.h"
|
||||
#include "hash.h"
|
||||
|
||||
void *Hash_AddKey2(hashtable_t *table, int key, void *data, bucket_t *buck); //fixme; move to hash.h
|
||||
void Hash_RemoveKey(hashtable_t *table, int key);
|
||||
|
||||
#undef malloc
|
||||
#undef free
|
||||
|
||||
#define free BZ_Free
|
||||
#define malloc BZ_Malloc
|
||||
|
||||
hashtable_t restable;
|
||||
bucket_t *resbuckets[1357]; //strange number to help the hashing.
|
||||
|
||||
xwindow_t *rootwindow;
|
||||
|
||||
xresource_t *resources;
|
||||
|
||||
qbyte *xscreen;
|
||||
short xscreenwidth;
|
||||
short xscreenheight;
|
||||
|
||||
int baseres;
|
||||
|
||||
void XS_ClearParent(xwindow_t *wnd);
|
||||
|
||||
int XS_GetResource(int id, void **data)
|
||||
{
|
||||
xresource_t *res;
|
||||
if (id < 0)
|
||||
return x_none;
|
||||
|
||||
res = Hash_GetKey(&restable, id);
|
||||
|
||||
if (res)
|
||||
{
|
||||
if (data)
|
||||
*data = res;
|
||||
return res->restype;
|
||||
}
|
||||
return x_none;
|
||||
}
|
||||
|
||||
Atom XS_FindAtom(char *name)
|
||||
{
|
||||
xresource_t *res;
|
||||
|
||||
for (res = resources; res; res = res->next)
|
||||
{
|
||||
if (res->restype == x_atom)
|
||||
{
|
||||
if (!strcmp(((xatom_t*)res)->atomname, name))
|
||||
return res->id;
|
||||
}
|
||||
}
|
||||
|
||||
return None;
|
||||
}
|
||||
|
||||
void XS_CheckResourceSentinals(void)
|
||||
{
|
||||
/* xresource_t *res;
|
||||
for (res = resources; res; res = res->next)
|
||||
{
|
||||
if (res->restype == x_window)
|
||||
{
|
||||
if (((xwindow_t*)res)->buffer)
|
||||
BZ_CheckSentinals(((xwindow_t*)res)->buffer);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void XS_DestroyResource(xresource_t *res)
|
||||
{
|
||||
qboolean nofree = false;
|
||||
if (res->restype == x_pixmap)
|
||||
{
|
||||
xpixmap_t *pm = (xpixmap_t *)res;
|
||||
|
||||
if (pm->references)
|
||||
nofree = true;
|
||||
if (!pm->linked)
|
||||
return;
|
||||
|
||||
pm->linked = false;
|
||||
}
|
||||
if (res->restype == x_window)
|
||||
{
|
||||
extern xwindow_t *xfocusedwindow, *xpgrabbedwindow;
|
||||
xwindow_t *wnd = (xwindow_t *)res;
|
||||
while(wnd->child)
|
||||
XS_DestroyResource((xresource_t *)(wnd->child));
|
||||
|
||||
if (xfocusedwindow == wnd)
|
||||
xfocusedwindow = wnd->parent;
|
||||
if (xpgrabbedwindow == wnd)
|
||||
xpgrabbedwindow = wnd->parent;
|
||||
|
||||
|
||||
if (wnd->mapped)
|
||||
{
|
||||
XW_ExposeWindow(wnd, 0, 0, wnd->width, wnd->height);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
xEvent ev;
|
||||
|
||||
xrefreshed = true;
|
||||
|
||||
ev.u.u.type = DestroyNotify;
|
||||
ev.u.u.detail = 0;
|
||||
ev.u.u.sequenceNumber = 0;
|
||||
ev.u.destroyNotify.event = wnd->res.id; //should be the window that has the recieve attribute.
|
||||
ev.u.destroyNotify.window = wnd->res.id;
|
||||
X_SendNotificationMasked (&ev, wnd, StructureNotifyMask);
|
||||
X_SendNotificationMasked (&ev, wnd, SubstructureNotifyMask);
|
||||
}
|
||||
|
||||
XS_ClearParent(wnd);
|
||||
}
|
||||
if (!res->prev)
|
||||
{
|
||||
resources = res->next;
|
||||
if (res->next)
|
||||
res->next->prev = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
res->prev->next = res->next;
|
||||
res->next->prev = res->prev;
|
||||
}
|
||||
|
||||
// XS_FindAtom("");
|
||||
|
||||
Hash_RemoveKey(&restable, res->id);
|
||||
if (!nofree)
|
||||
free(res);
|
||||
|
||||
// XS_FindAtom("");
|
||||
}
|
||||
|
||||
void XS_DestroyResourcesOfClient(xclient_t *cl)
|
||||
{
|
||||
xresource_t *res;
|
||||
xnotificationmask_t *nm, *nm2;
|
||||
|
||||
if (xgrabbedclient == cl)
|
||||
xgrabbedclient = NULL;
|
||||
if (xpointergrabclient == cl)
|
||||
xpointergrabclient = NULL;
|
||||
|
||||
for (res = resources; res;)
|
||||
{
|
||||
if (res->restype == x_window)
|
||||
{ //clear the event masks
|
||||
nm = ((xwindow_t *)res)->notificationmask;
|
||||
if (nm)
|
||||
{
|
||||
if (nm->client == cl)
|
||||
{
|
||||
((xwindow_t *)res)->notificationmask = nm->next;
|
||||
free(nm);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (; nm->next; nm = nm->next)
|
||||
{
|
||||
if (nm->next->client == cl || !cl)
|
||||
{
|
||||
nm2 = nm->next;
|
||||
nm->next = nm->next->next;
|
||||
free(nm2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (res->owner == cl)
|
||||
{
|
||||
XS_DestroyResource(res);
|
||||
|
||||
res = resources; //evil!!!
|
||||
continue;
|
||||
}
|
||||
res = res->next;
|
||||
}
|
||||
}
|
||||
|
||||
void XS_LinkResource(xresource_t *res)
|
||||
{
|
||||
res->next = resources;
|
||||
resources = res;
|
||||
|
||||
res->prev = NULL;
|
||||
if (res->next)
|
||||
res->next->prev = res;
|
||||
Hash_AddKey2(&restable, res->id, res, malloc(sizeof(bucket_t)));
|
||||
}
|
||||
|
||||
xatom_t *XS_CreateAtom(Atom atomid, char *name, xclient_t *owner)
|
||||
{
|
||||
xatom_t *at;
|
||||
at = malloc(sizeof(xatom_t)+strlen(name));
|
||||
at->res.owner = owner;
|
||||
at->res.restype = x_atom;
|
||||
at->res.id = atomid;
|
||||
strcpy(at->atomname, name);
|
||||
|
||||
XS_LinkResource(&at->res);
|
||||
|
||||
return at;
|
||||
}
|
||||
|
||||
void XS_ClearParent(xwindow_t *wnd)
|
||||
{
|
||||
xwindow_t *sib;
|
||||
|
||||
xwindow_t *parent = wnd->parent;
|
||||
|
||||
if (!parent)
|
||||
return;
|
||||
|
||||
wnd->parent = NULL;
|
||||
|
||||
if (parent->child == wnd)
|
||||
{
|
||||
parent->child = wnd->sibling;
|
||||
return;
|
||||
}
|
||||
|
||||
for (sib = parent->child; sib; sib = sib->sibling)
|
||||
{
|
||||
if (sib->sibling == wnd)
|
||||
{
|
||||
sib->sibling = wnd->sibling;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int XS_GetProperty(xwindow_t *wnd, Atom atomid, Atom *atomtype, char *output, int maxlen, int offset, int *extrabytes, int *format)
|
||||
{
|
||||
xproperty_t *xp;
|
||||
for (xp = wnd->properties; xp; xp = xp->next)
|
||||
{
|
||||
if (xp->atomid == atomid)
|
||||
{
|
||||
if (maxlen > xp->datalen - offset)
|
||||
maxlen = xp->datalen - offset;
|
||||
memcpy(output, xp->data + offset, maxlen);
|
||||
if (maxlen < 0)
|
||||
maxlen = 0;
|
||||
*extrabytes = xp->datalen - maxlen - offset;
|
||||
*format = xp->format;
|
||||
*atomtype = xp->type;
|
||||
if (*extrabytes < 0)
|
||||
*extrabytes = 0;
|
||||
return maxlen;
|
||||
}
|
||||
}
|
||||
*format = 0;
|
||||
*extrabytes = 0;
|
||||
*atomtype = None;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void XS_DeleteProperty(xwindow_t *wnd, Atom atomid)
|
||||
{
|
||||
xproperty_t *xp, *prev = NULL;
|
||||
for (xp = wnd->properties; xp; xp = xp->next)
|
||||
{
|
||||
if (xp->atomid == atomid)
|
||||
{
|
||||
if (prev)
|
||||
prev->next = xp->next;
|
||||
else
|
||||
wnd->properties = xp->next;
|
||||
|
||||
free(xp);
|
||||
return;
|
||||
}
|
||||
prev = xp;
|
||||
}
|
||||
}
|
||||
|
||||
void XS_SetProperty(xwindow_t *wnd, Atom atomid, Atom atomtype, char *data, int datalen, int format)
|
||||
{
|
||||
xproperty_t *prop;
|
||||
XS_DeleteProperty(wnd, atomid);
|
||||
|
||||
prop = malloc(sizeof(xproperty_t) + datalen);
|
||||
prop->atomid = atomid;
|
||||
prop->format = format;
|
||||
prop->type = atomtype;
|
||||
|
||||
memcpy(prop->data, data, datalen);
|
||||
prop->data[datalen] = '\0';
|
||||
prop->datalen = datalen;
|
||||
|
||||
prop->next = wnd->properties;
|
||||
wnd->properties = prop;
|
||||
}
|
||||
|
||||
void XS_RaiseWindow(xwindow_t *wnd)
|
||||
{
|
||||
xwindow_t *bigger;
|
||||
if (!wnd->parent)
|
||||
return;
|
||||
|
||||
bigger = wnd->parent->child;
|
||||
if (bigger == wnd)
|
||||
{
|
||||
wnd->parent->child = wnd->sibling;
|
||||
bigger = wnd->sibling;
|
||||
if (!bigger)
|
||||
{
|
||||
wnd->parent->child = wnd;
|
||||
//ah well, it was worth a try
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while(bigger->sibling != wnd)
|
||||
bigger = bigger->sibling;
|
||||
|
||||
bigger->sibling = wnd->sibling; //unlink
|
||||
}
|
||||
while(bigger->sibling)
|
||||
bigger = bigger->sibling;
|
||||
|
||||
bigger->sibling = wnd;
|
||||
wnd->sibling = NULL;
|
||||
}
|
||||
void XS_SetParent(xwindow_t *wnd, xwindow_t *parent)
|
||||
{
|
||||
XS_ClearParent(wnd);
|
||||
if (parent)
|
||||
{
|
||||
wnd->sibling = parent->child;
|
||||
parent->child = wnd;
|
||||
}
|
||||
wnd->parent = parent;
|
||||
|
||||
XS_RaiseWindow(wnd);
|
||||
}
|
||||
|
||||
xwindow_t *XS_CreateWindow(int wid, xclient_t *owner, xwindow_t *parent, short x, short y, short width, short height)
|
||||
{
|
||||
xwindow_t *neww;
|
||||
neww = malloc(sizeof(xwindow_t));
|
||||
memset(neww, 0, sizeof(xwindow_t));
|
||||
|
||||
neww->res.id = wid;
|
||||
neww->res.owner = owner;
|
||||
neww->res.restype = x_window;
|
||||
|
||||
if (width < 0)
|
||||
{
|
||||
width*=-1;
|
||||
x-=width;
|
||||
}
|
||||
if (height < 0)
|
||||
{
|
||||
height*=-1;
|
||||
x-=height;
|
||||
}
|
||||
|
||||
neww->xpos = (CARD16)x;
|
||||
neww->ypos = (CARD16)y;
|
||||
neww->width = width;
|
||||
neww->height = height;
|
||||
neww->buffer = NULL;
|
||||
|
||||
XS_SetParent(neww, parent);
|
||||
|
||||
XS_LinkResource(&neww->res);
|
||||
|
||||
XS_CheckResourceSentinals();
|
||||
return neww;
|
||||
}
|
||||
|
||||
xgcontext_t *XS_CreateGContext(int id, xclient_t *owner, xresource_t *drawable)
|
||||
{
|
||||
xgcontext_t *newgc;
|
||||
newgc = malloc(sizeof(xgcontext_t));
|
||||
memset(newgc, 0, sizeof(xgcontext_t));
|
||||
|
||||
newgc->res.id = id;
|
||||
newgc->res.owner = owner;
|
||||
newgc->res.restype = x_gcontext;
|
||||
|
||||
newgc->function = GXcopy;
|
||||
newgc->bgcolour = 0xffffff;
|
||||
newgc->fgcolour = 0;
|
||||
|
||||
XS_LinkResource(&newgc->res);
|
||||
|
||||
return newgc;
|
||||
}
|
||||
|
||||
xpixmap_t *XS_CreatePixmap(int id, xclient_t *owner, int width, int height, int depth)
|
||||
{
|
||||
xpixmap_t *newpm;
|
||||
newpm = malloc(sizeof(xpixmap_t) + (width*height*4));
|
||||
memset(newpm, 0, sizeof(xpixmap_t));
|
||||
|
||||
newpm->res.id = id;
|
||||
newpm->res.owner = owner;
|
||||
newpm->res.restype = x_pixmap;
|
||||
|
||||
if (id>0)
|
||||
{
|
||||
newpm->linked=true; //destroyed when last reference AND this are cleared
|
||||
XS_LinkResource(&newpm->res);
|
||||
}
|
||||
|
||||
newpm->data = (qbyte*)(newpm+1);
|
||||
newpm->width = width;
|
||||
newpm->height = height;
|
||||
newpm->depth = depth;
|
||||
|
||||
return newpm;
|
||||
}
|
||||
|
||||
int XS_NewResource (void)
|
||||
{
|
||||
return baseres++;
|
||||
}
|
||||
void XS_CreateInitialResources(void)
|
||||
{
|
||||
static xpixmap_t pm;
|
||||
static unsigned int rawpm[8*9] = {
|
||||
0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
|
||||
0x000000, 0x000000, 0xffffff, 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000,
|
||||
0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0xffffff, 0x000000, 0x000000,
|
||||
0xffffff, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xffffff, 0x000000,
|
||||
0xffffff, 0x000000, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0xffffff, 0x000000,
|
||||
0xffffff, 0x000000, 0x000000, 0xffffff, 0x000000, 0x000000, 0xffffff, 0x000000,
|
||||
0x000000, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x000000, 0x000000,
|
||||
0x000000, 0x000000, 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000,
|
||||
0x000000, 0x000000, 0x000000, 0xffffff, 0x000000, 0x000000, 0x000000, 0x000000};
|
||||
|
||||
if (baseres)
|
||||
return;
|
||||
baseres=1;
|
||||
|
||||
xscreenwidth = 640;
|
||||
xscreenheight = 480;
|
||||
xscreen = realloc(xscreen, xscreenwidth*4 * xscreenheight);
|
||||
|
||||
XS_CheckResourceSentinals();
|
||||
|
||||
XS_DestroyResourcesOfClient(NULL);
|
||||
|
||||
memset(resbuckets, 0, sizeof(resbuckets));
|
||||
Hash_InitTable(&restable, sizeof(resbuckets)/sizeof(resbuckets[0]), resbuckets);
|
||||
|
||||
resources = NULL;
|
||||
|
||||
|
||||
XS_CreateAtom(baseres++, "PRIMARY", NULL);
|
||||
XS_CreateAtom(baseres++, "SECONDARY", NULL);
|
||||
XS_CreateAtom(baseres++, "ARC", NULL);
|
||||
XS_CreateAtom(baseres++, "ATOM", NULL);
|
||||
XS_CreateAtom(baseres++, "BITMAP", NULL);
|
||||
XS_CreateAtom(baseres++, "CARDINAL", NULL);
|
||||
XS_CreateAtom(baseres++, "COLORMAP", NULL);
|
||||
XS_CreateAtom(baseres++, "CURSOR", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER0", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER1", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER2", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER3", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER4", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER5", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER6", NULL);
|
||||
XS_CreateAtom(baseres++, "CUT_BUFFER7", NULL);
|
||||
XS_CreateAtom(baseres++, "DRAWABLE", NULL);
|
||||
XS_CreateAtom(baseres++, "FONT", NULL);
|
||||
XS_CreateAtom(baseres++, "INTEGER", NULL);
|
||||
XS_CreateAtom(baseres++, "PIXMAP", NULL);
|
||||
XS_CreateAtom(baseres++, "POINT", NULL);
|
||||
XS_CreateAtom(baseres++, "RECTANGLE", NULL);
|
||||
XS_CreateAtom(baseres++, "RESOURCE_MANAGER", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_COLOR_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_BEST_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_BLUE_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_DEFAULT_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_GRAY_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_GREEN_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "RGB_RED_MAP", NULL);
|
||||
XS_CreateAtom(baseres++, "STRING", NULL);
|
||||
XS_CreateAtom(baseres++, "VISUALID", NULL);
|
||||
XS_CreateAtom(baseres++, "WINDOW", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_COMMAND", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_HINTS", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_CLIENT_MACHINE", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_ICON_NAME", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_ICON_SIZE", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_NAME", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_NORMAL_HINTS", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_SIZE_HINTS", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_ZOOM_HINTS", NULL);
|
||||
XS_CreateAtom(baseres++, "MIN_SPACE", NULL);
|
||||
XS_CreateAtom(baseres++, "NORM_SPACE", NULL);
|
||||
XS_CreateAtom(baseres++, "MAX_SPACE", NULL);
|
||||
XS_CreateAtom(baseres++, "END_SPACE", NULL);
|
||||
XS_CreateAtom(baseres++, "SUPERSCRIPT_X", NULL);
|
||||
XS_CreateAtom(baseres++, "SUPERSCRIPT_Y", NULL);
|
||||
XS_CreateAtom(baseres++, "SUBSCRIPT_X", NULL);
|
||||
XS_CreateAtom(baseres++, "SUBSCRIPT_Y", NULL);
|
||||
XS_CreateAtom(baseres++, "UNDERLINE_POSITION", NULL);
|
||||
XS_CreateAtom(baseres++, "UNDERLINE_THICKNESS", NULL);
|
||||
XS_CreateAtom(baseres++, "STRIKEOUT_ASCENT", NULL);
|
||||
XS_CreateAtom(baseres++, "STRIKEOUT_DESCENT", NULL);
|
||||
XS_CreateAtom(baseres++, "ITALIC_ANGLE", NULL);
|
||||
XS_CreateAtom(baseres++, "X_HEIGHT", NULL);
|
||||
XS_CreateAtom(baseres++, "QUAD_WIDTH", NULL);
|
||||
XS_CreateAtom(baseres++, "WEIGHT", NULL);
|
||||
XS_CreateAtom(baseres++, "POINT_SIZE", NULL);
|
||||
XS_CreateAtom(baseres++, "RESOLUTION", NULL);
|
||||
XS_CreateAtom(baseres++, "COPYRIGHT", NULL);
|
||||
XS_CreateAtom(baseres++, "NOTICE", NULL);
|
||||
XS_CreateAtom(baseres++, "FONT_NAME", NULL);
|
||||
XS_CreateAtom(baseres++, "FAMILY_NAME", NULL);
|
||||
XS_CreateAtom(baseres++, "FULL_NAME", NULL);
|
||||
XS_CreateAtom(baseres++, "CAP_HEIGHT", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_CLASS", NULL);
|
||||
XS_CreateAtom(baseres++, "WM_TRANSIENT_FOR", NULL);
|
||||
|
||||
rootwindow = XS_CreateWindow(baseres++, NULL, NULL, 0, 0, xscreenwidth, xscreenheight);
|
||||
rootwindow->mapped = true;
|
||||
|
||||
XS_CheckResourceSentinals();
|
||||
|
||||
|
||||
memset(&pm, 0, sizeof(pm));
|
||||
pm.linked = true;
|
||||
pm.data = (qbyte *)rawpm;
|
||||
pm.depth = 24;
|
||||
pm.width = 8;
|
||||
pm.height = 9;
|
||||
pm.references = 2;
|
||||
pm.res.restype = x_pixmap;
|
||||
|
||||
rootwindow->backpixmap = ±
|
||||
|
||||
XW_ClearArea(rootwindow, 0, 0, rootwindow->width, rootwindow->height);
|
||||
|
||||
XS_CheckResourceSentinals();
|
||||
|
||||
xrefreshed = true;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue