|
|
1.1 root 1: /* $Header: extension.h,v 1.2 87/09/08 14:02:46 toddb Exp $ */
2: /***********************************************************
3: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
4: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
5:
6: All Rights Reserved
7:
8: Permission to use, copy, modify, and distribute this software and its
9: documentation for any purpose and without fee is hereby granted,
10: provided that the above copyright notice appear in all copies and that
11: both that copyright notice and this permission notice appear in
12: supporting documentation, and that the names of Digital or MIT not be
13: used in advertising or publicity pertaining to distribution of the
14: software without specific, written prior permission.
15:
16: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
17: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
18: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
19: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
22: SOFTWARE.
23:
24: ******************************************************************/
25: #ifndef EXTENSION_H
26: #define EXTENSION_H
27:
28: /****************************************************************
29: * extension.h: static bindings for extending X protocol.
30: *
31: * Each protocol extension is encapsulated in the following record:
32: *
33: * typedef struct _extension_entry {
34: * char *name;
35: * int base;
36: * void (* InitProc)();
37: * int (* MainProc)();
38: * } EXTENSION_ENTRY;
39: *
40: * When Dispatch() gets a request type > 128, it calls
41: * XDispatchToExtension. This routine looks in the extension table for the
42: * the (MainProc) to call. It gets one parameter, char *request (the
43: * string returned from ReadRequestFromClient). MainProc() should return
44: * a status flag to the disptacher. In main(), the init procedure
45: * for each loaded extension is called.
46: *
47: * Extension procedures to call when a GC is created and destroy are
48: * defined in gc.h (in the include directory)
49: *
50: ****************************************************************/
51:
52: #define GetGCAndDrawableAndValidate(gcID, pGC, drawID, pDraw, client)\
53: if ((client->lastDrawableID != drawID) || (client->lastGCID != gcID))\
54: {\
55: if (client->lastDrawableID != drawID)\
56: {\
57: pDraw = (DrawablePtr)LookupID(drawID, RT_DRAWABLE, RC_CORE);\
58: if (!pDraw)\
59: {\
60: client->errorValue = drawID; \
61: return (BadDrawable);\
62: }\
63: if ((pDraw->type == DRAWABLE_WINDOW) || \
64: (pDraw->type == DRAWABLE_PIXMAP))\
65: {\
66: client->lastDrawable = pDraw;\
67: client->lastDrawableID = drawID;\
68: }\
69: else\
70: {\
71: client->errorValue = drawID;\
72: return (BadDrawable);\
73: }\
74: }\
75: else\
76: pDraw = (DrawablePtr)client->lastDrawable;\
77: if (client->lastGCID != gcID)\
78: {\
79: pGC = (GC *)LookupID(gcID, RT_GC, RC_CORE);\
80: if (!pGC)\
81: {\
82: client->errorValue = gcID;\
83: return (BadGC);\
84: }\
85: client->lastGC = pGC;\
86: client->lastGCID = gcID;\
87: }\
88: else\
89: pGC = (GC *) client->lastGC;\
90: if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
91: {\
92: client->errorValue = gcID;\
93: client->lastGCID = 0;\
94: return (BadMatch);\
95: }\
96: }\
97: else\
98: {\
99: pGC = (GC *) client->lastGC;\
100: pDraw = (DrawablePtr)client->lastDrawable;\
101: }\
102: if (pGC->serialNumber != pDraw->serialNumber)\
103: { \
104: ValidateGC(pDraw, pGC);\
105: }
106: #endif /* EXTENSION_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.