miinitext.c revision 05b261ec
105b261ecSmrg/***********************************************************
205b261ecSmrg
305b261ecSmrgCopyright 1987, 1998  The Open Group
405b261ecSmrg
505b261ecSmrgPermission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrgdocumentation for any purpose is hereby granted without fee, provided that
705b261ecSmrgthe above copyright notice appear in all copies and that both that
805b261ecSmrgcopyright notice and this permission notice appear in supporting
905b261ecSmrgdocumentation.
1005b261ecSmrg
1105b261ecSmrgThe above copyright notice and this permission notice shall be included in
1205b261ecSmrgall copies or substantial portions of the Software.
1305b261ecSmrg
1405b261ecSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1505b261ecSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1605b261ecSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
1705b261ecSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
1805b261ecSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1905b261ecSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2005b261ecSmrg
2105b261ecSmrgExcept as contained in this notice, the name of The Open Group shall not be
2205b261ecSmrgused in advertising or otherwise to promote the sale, use or other dealings
2305b261ecSmrgin this Software without prior written authorization from The Open Group.
2405b261ecSmrg
2505b261ecSmrg
2605b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
2705b261ecSmrg
2805b261ecSmrg                        All Rights Reserved
2905b261ecSmrg
3005b261ecSmrgPermission to use, copy, modify, and distribute this software and its
3105b261ecSmrgdocumentation for any purpose and without fee is hereby granted,
3205b261ecSmrgprovided that the above copyright notice appear in all copies and that
3305b261ecSmrgboth that copyright notice and this permission notice appear in
3405b261ecSmrgsupporting documentation, and that the name of Digital not be
3505b261ecSmrgused in advertising or publicity pertaining to distribution of the
3605b261ecSmrgsoftware without specific, written prior permission.
3705b261ecSmrg
3805b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
3905b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
4005b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
4105b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
4205b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
4305b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4405b261ecSmrgSOFTWARE.
4505b261ecSmrg
4605b261ecSmrg******************************************************************/
4705b261ecSmrg
4805b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
4905b261ecSmrg#include <dix-config.h>
5005b261ecSmrg#endif
5105b261ecSmrg
5205b261ecSmrg#ifdef HAVE_XORG_CONFIG_H
5305b261ecSmrg#include <xorg-config.h>
5405b261ecSmrg#endif
5505b261ecSmrg
5605b261ecSmrg#ifdef HAVE_DMX_CONFIG_H
5705b261ecSmrg#include <dmx-config.h>
5805b261ecSmrg#endif
5905b261ecSmrg
6005b261ecSmrg#ifdef HAVE_XNEST_CONFIG_H
6105b261ecSmrg#include <xnest-config.h>
6205b261ecSmrg#undef DPMSExtension
6305b261ecSmrg#endif
6405b261ecSmrg
6505b261ecSmrg#ifdef HAVE_KDRIVE_CONFIG_H
6605b261ecSmrg#include <kdrive-config.h>
6705b261ecSmrg/* there must be a better way... */
6805b261ecSmrg#undef XF86MISC
6905b261ecSmrg#undef XFreeXDGA
7005b261ecSmrg#undef XF86DRI
7105b261ecSmrg#undef XF86VIDMODE
7205b261ecSmrg#endif
7305b261ecSmrg
7405b261ecSmrg#ifdef HAVE_XGL_CONFIG_H
7505b261ecSmrg#include <xgl-config.h>
7605b261ecSmrg#undef XF86MISC
7705b261ecSmrg#undef XFreeXDGA
7805b261ecSmrg#undef XF86DRI
7905b261ecSmrg#undef XF86VIDMODE
8005b261ecSmrg#endif
8105b261ecSmrg
8205b261ecSmrg#include "misc.h"
8305b261ecSmrg#include "extension.h"
8405b261ecSmrg#include "micmap.h"
8505b261ecSmrg#include "globals.h"
8605b261ecSmrg
8705b261ecSmrg#if defined(QNX4) /* sleaze for Watcom on QNX4 ... */
8805b261ecSmrg#undef GLXEXT
8905b261ecSmrg#endif
9005b261ecSmrg
9105b261ecSmrg/* Make sure Xprt only announces extensions it supports */
9205b261ecSmrg#ifdef PRINT_ONLY_SERVER
9305b261ecSmrg#undef MITSHM /* this is incompatible to the vector-based Xprint DDX */
9405b261ecSmrg#undef XKB
9505b261ecSmrg#undef PANORAMIX
9605b261ecSmrg#undef RES
9705b261ecSmrg#undef XINPUT
9805b261ecSmrg#undef XV
9905b261ecSmrg#undef SCREENSAVER
10005b261ecSmrg#undef XIDLE
10105b261ecSmrg#undef XRECORD
10205b261ecSmrg#undef XF86VIDMODE
10305b261ecSmrg#undef XF86MISC
10405b261ecSmrg#undef XFreeXDGA
10505b261ecSmrg#undef XF86DRI
10605b261ecSmrg#undef DPMSExtension
10705b261ecSmrg#undef FONTCACHE
10805b261ecSmrg#undef COMPOSITE
10905b261ecSmrg#undef DAMAGE
11005b261ecSmrg#undef XFIXES
11105b261ecSmrg#undef XEVIE
11205b261ecSmrg#else
11305b261ecSmrg#ifndef LOADABLEPRINTDDX
11405b261ecSmrg#undef XPRINT
11505b261ecSmrg#endif /* LOADABLEPRINTDDX */
11605b261ecSmrg#endif /* PRINT_ONLY_SERVER */
11705b261ecSmrg
11805b261ecSmrg
11905b261ecSmrgextern Bool noTestExtensions;
12005b261ecSmrg
12105b261ecSmrg#ifdef BIGREQS
12205b261ecSmrgextern Bool noBigReqExtension;
12305b261ecSmrg#endif
12405b261ecSmrg#ifdef COMPOSITE
12505b261ecSmrgextern Bool noCompositeExtension;
12605b261ecSmrg#endif
12705b261ecSmrg#ifdef DBE
12805b261ecSmrgextern Bool noDbeExtension;
12905b261ecSmrg#endif
13005b261ecSmrg#ifdef DPMSExtension
13105b261ecSmrgextern Bool noDPMSExtension;
13205b261ecSmrg#endif
13305b261ecSmrg#ifdef EVI
13405b261ecSmrgextern Bool noEVIExtension;
13505b261ecSmrg#endif
13605b261ecSmrg#ifdef FONTCACHE
13705b261ecSmrgextern Bool noFontCacheExtension;
13805b261ecSmrg#endif
13905b261ecSmrg#ifdef GLXEXT
14005b261ecSmrgextern Bool noGlxExtension;
14105b261ecSmrg#endif
14205b261ecSmrg#ifdef SCREENSAVER
14305b261ecSmrgextern Bool noScreenSaverExtension;
14405b261ecSmrg#endif
14505b261ecSmrg#ifdef MITSHM
14605b261ecSmrgextern Bool noMITShmExtension;
14705b261ecSmrg#endif
14805b261ecSmrg#ifdef MITMISC
14905b261ecSmrgextern Bool noMITMiscExtension;
15005b261ecSmrg#endif
15105b261ecSmrg#ifdef MULTIBUFFER
15205b261ecSmrgextern Bool noMultibufferExtension;
15305b261ecSmrg#endif
15405b261ecSmrg#ifdef RANDR
15505b261ecSmrgextern Bool noRRExtension;
15605b261ecSmrg#endif
15705b261ecSmrg#ifdef RENDER
15805b261ecSmrgextern Bool noRenderExtension;
15905b261ecSmrg#endif
16005b261ecSmrg#ifdef SHAPE
16105b261ecSmrgextern Bool noShapeExtension;
16205b261ecSmrg#endif
16305b261ecSmrg#ifdef XCSECURITY
16405b261ecSmrgextern Bool noSecurityExtension;
16505b261ecSmrg#endif
16605b261ecSmrg#ifdef XSYNC
16705b261ecSmrgextern Bool noSyncExtension;
16805b261ecSmrg#endif
16905b261ecSmrg#ifdef TOGCUP
17005b261ecSmrgextern Bool noXcupExtension;
17105b261ecSmrg#endif
17205b261ecSmrg#ifdef RES
17305b261ecSmrgextern Bool noResExtension;
17405b261ecSmrg#endif
17505b261ecSmrg#ifdef XAPPGROUP
17605b261ecSmrgextern Bool noXagExtension;
17705b261ecSmrg#endif
17805b261ecSmrg#ifdef XCMISC
17905b261ecSmrgextern Bool noXCMiscExtension;
18005b261ecSmrg#endif
18105b261ecSmrg#ifdef XEVIE
18205b261ecSmrgextern Bool noXevieExtension;
18305b261ecSmrg#endif
18405b261ecSmrg#ifdef XF86BIGFONT
18505b261ecSmrgextern Bool noXFree86BigfontExtension;
18605b261ecSmrg#endif
18705b261ecSmrg#ifdef XFreeXDGA
18805b261ecSmrgextern Bool noXFree86DGAExtension;
18905b261ecSmrg#endif
19005b261ecSmrg#ifdef XF86DRI
19105b261ecSmrgextern Bool noXFree86DRIExtension;
19205b261ecSmrg#endif
19305b261ecSmrg#ifdef XF86MISC
19405b261ecSmrgextern Bool noXFree86MiscExtension;
19505b261ecSmrg#endif
19605b261ecSmrg#ifdef XF86VIDMODE
19705b261ecSmrgextern Bool noXFree86VidModeExtension;
19805b261ecSmrg#endif
19905b261ecSmrg#ifdef XFIXES
20005b261ecSmrgextern Bool noXFixesExtension;
20105b261ecSmrg#endif
20205b261ecSmrg#ifdef XKB
20305b261ecSmrg/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
20405b261ecSmrgextern Bool noXkbExtension;
20505b261ecSmrg#endif
20605b261ecSmrg#ifdef PANORAMIX
20705b261ecSmrgextern Bool noPanoramiXExtension;
20805b261ecSmrg#endif
20905b261ecSmrg#ifdef XINPUT
21005b261ecSmrgextern Bool noXInputExtension;
21105b261ecSmrg#endif
21205b261ecSmrg#ifdef XIDLE
21305b261ecSmrgextern Bool noXIdleExtension;
21405b261ecSmrg#endif
21505b261ecSmrg#ifdef XV
21605b261ecSmrgextern Bool noXvExtension;
21705b261ecSmrg#endif
21805b261ecSmrg
21905b261ecSmrg#ifndef XFree86LOADER
22005b261ecSmrg#define INITARGS void
22105b261ecSmrgtypedef void (*InitExtension)(INITARGS);
22205b261ecSmrg#else /* XFree86Loader */
22305b261ecSmrg#include "loaderProcs.h"
22405b261ecSmrg#endif
22505b261ecSmrg
22605b261ecSmrg#ifdef MITSHM
22705b261ecSmrg#define _XSHM_SERVER_
22805b261ecSmrg#include <X11/extensions/shmstr.h>
22905b261ecSmrg#endif
23005b261ecSmrg#ifdef XTEST
23105b261ecSmrg#define _XTEST_SERVER_
23205b261ecSmrg#include <X11/extensions/XTest.h>
23305b261ecSmrg#endif
23405b261ecSmrg#ifdef XKB
23505b261ecSmrg#include <X11/extensions/XKB.h>
23605b261ecSmrg#endif
23705b261ecSmrg#ifdef XPRINT
23805b261ecSmrg#include <X11/extensions/Print.h>
23905b261ecSmrg#endif
24005b261ecSmrg#ifdef XAPPGROUP
24105b261ecSmrg#define _XAG_SERVER_
24205b261ecSmrg#include <X11/extensions/Xagstr.h>
24305b261ecSmrg#endif
24405b261ecSmrg#ifdef XACE
24505b261ecSmrg#include "xace.h"
24605b261ecSmrg#endif
24705b261ecSmrg#ifdef XCSECURITY
24805b261ecSmrg#include "securitysrv.h"
24905b261ecSmrg#include <X11/extensions/securstr.h>
25005b261ecSmrg#endif
25105b261ecSmrg#ifdef PANORAMIX
25205b261ecSmrg#include <X11/extensions/panoramiXproto.h>
25305b261ecSmrg#endif
25405b261ecSmrg#ifdef XF86BIGFONT
25505b261ecSmrg#include <X11/extensions/xf86bigfstr.h>
25605b261ecSmrg#endif
25705b261ecSmrg#ifdef RES
25805b261ecSmrg#include <X11/extensions/XResproto.h>
25905b261ecSmrg#endif
26005b261ecSmrg
26105b261ecSmrg/* FIXME: this whole block of externs should be from the appropriate headers */
26205b261ecSmrg#ifdef EVI
26305b261ecSmrgextern void EVIExtensionInit(INITARGS);
26405b261ecSmrg#endif
26505b261ecSmrg#ifdef MITSHM
26605b261ecSmrgextern void ShmExtensionInit(INITARGS);
26705b261ecSmrg#endif
26805b261ecSmrg#ifdef MULTIBUFFER
26905b261ecSmrgextern void MultibufferExtensionInit(INITARGS);
27005b261ecSmrg#endif
27105b261ecSmrg#ifdef PANORAMIX
27205b261ecSmrgextern void PanoramiXExtensionInit(INITARGS);
27305b261ecSmrg#endif
27405b261ecSmrg#ifdef XINPUT
27505b261ecSmrgextern void XInputExtensionInit(INITARGS);
27605b261ecSmrg#endif
27705b261ecSmrg#ifdef XTEST
27805b261ecSmrgextern void XTestExtensionInit(INITARGS);
27905b261ecSmrg#endif
28005b261ecSmrg#ifdef BIGREQS
28105b261ecSmrgextern void BigReqExtensionInit(INITARGS);
28205b261ecSmrg#endif
28305b261ecSmrg#ifdef MITMISC
28405b261ecSmrgextern void MITMiscExtensionInit(INITARGS);
28505b261ecSmrg#endif
28605b261ecSmrg#ifdef XIDLE
28705b261ecSmrgextern void XIdleExtensionInit(INITARGS);
28805b261ecSmrg#endif
28905b261ecSmrg#ifdef XTRAP
29005b261ecSmrgextern void DEC_XTRAPInit(INITARGS);
29105b261ecSmrg#endif
29205b261ecSmrg#ifdef SCREENSAVER
29305b261ecSmrgextern void ScreenSaverExtensionInit (INITARGS);
29405b261ecSmrg#endif
29505b261ecSmrg#ifdef XV
29605b261ecSmrgextern void XvExtensionInit(INITARGS);
29705b261ecSmrgextern void XvMCExtensionInit(INITARGS);
29805b261ecSmrg#endif
29905b261ecSmrg#ifdef XSYNC
30005b261ecSmrgextern void SyncExtensionInit(INITARGS);
30105b261ecSmrg#endif
30205b261ecSmrg#ifdef XKB
30305b261ecSmrgextern void XkbExtensionInit(INITARGS);
30405b261ecSmrg#endif
30505b261ecSmrg#ifdef XCMISC
30605b261ecSmrgextern void XCMiscExtensionInit(INITARGS);
30705b261ecSmrg#endif
30805b261ecSmrg#ifdef XRECORD
30905b261ecSmrgextern void RecordExtensionInit(INITARGS);
31005b261ecSmrg#endif
31105b261ecSmrg#ifdef DBE
31205b261ecSmrgextern void DbeExtensionInit(INITARGS);
31305b261ecSmrg#endif
31405b261ecSmrg#ifdef XAPPGROUP
31505b261ecSmrgextern void XagExtensionInit(INITARGS);
31605b261ecSmrg#endif
31705b261ecSmrg#ifdef XACE
31805b261ecSmrgextern void XaceExtensionInit(INITARGS);
31905b261ecSmrg#endif
32005b261ecSmrg#ifdef XCSECURITY
32105b261ecSmrgextern void SecurityExtensionSetup(INITARGS);
32205b261ecSmrgextern void SecurityExtensionInit(INITARGS);
32305b261ecSmrg#endif
32405b261ecSmrg#ifdef XPRINT
32505b261ecSmrgextern void XpExtensionInit(INITARGS);
32605b261ecSmrg#endif
32705b261ecSmrg#ifdef XF86BIGFONT
32805b261ecSmrgextern void XFree86BigfontExtensionInit(INITARGS);
32905b261ecSmrg#endif
33005b261ecSmrg#ifdef XF86VIDMODE
33105b261ecSmrgextern void XFree86VidModeExtensionInit(INITARGS);
33205b261ecSmrg#endif
33305b261ecSmrg#ifdef XF86MISC
33405b261ecSmrgextern void XFree86MiscExtensionInit(INITARGS);
33505b261ecSmrg#endif
33605b261ecSmrg#ifdef XFreeXDGA
33705b261ecSmrgextern void XFree86DGAExtensionInit(INITARGS);
33805b261ecSmrg#endif
33905b261ecSmrg#ifdef GLXEXT
34005b261ecSmrgtypedef struct __GLXprovider __GLXprovider;
34105b261ecSmrg#ifdef INXDARWINAPP
34205b261ecSmrgextern __GLXprovider* __DarwinglXMesaProvider;
34305b261ecSmrgextern void DarwinGlxPushProvider(__GLXprovider *impl);
34405b261ecSmrgextern void DarwinGlxExtensionInit(INITARGS);
34505b261ecSmrgextern void DarwinGlxWrapInitVisuals(miInitVisualsProcPtr *);
34605b261ecSmrg#else
34705b261ecSmrgextern __GLXprovider __glXMesaProvider;
34805b261ecSmrgextern void GlxPushProvider(__GLXprovider *impl);
34905b261ecSmrgextern void GlxExtensionInit(INITARGS);
35005b261ecSmrgextern void GlxWrapInitVisuals(miInitVisualsProcPtr *);
35105b261ecSmrg#endif // INXDARWINAPP
35205b261ecSmrg#endif // GLXEXT
35305b261ecSmrg#ifdef XF86DRI
35405b261ecSmrgextern void XFree86DRIExtensionInit(INITARGS);
35505b261ecSmrg#endif
35605b261ecSmrg#ifdef TOGCUP
35705b261ecSmrgextern void XcupExtensionInit(INITARGS);
35805b261ecSmrg#endif
35905b261ecSmrg#ifdef DPMSExtension
36005b261ecSmrgextern void DPMSExtensionInit(INITARGS);
36105b261ecSmrg#endif
36205b261ecSmrg#ifdef FONTCACHE
36305b261ecSmrgextern void FontCacheExtensionInit(INITARGS);
36405b261ecSmrg#endif
36505b261ecSmrg#ifdef RENDER
36605b261ecSmrgextern void RenderExtensionInit(INITARGS);
36705b261ecSmrg#endif
36805b261ecSmrg#ifdef RANDR
36905b261ecSmrgextern void RRExtensionInit(INITARGS);
37005b261ecSmrg#endif
37105b261ecSmrg#ifdef RES
37205b261ecSmrgextern void ResExtensionInit(INITARGS);
37305b261ecSmrg#endif
37405b261ecSmrg#ifdef DMXEXT
37505b261ecSmrgextern void DMXExtensionInit(INITARGS);
37605b261ecSmrg#endif
37705b261ecSmrg#ifdef XEVIE
37805b261ecSmrgextern void XevieExtensionInit(INITARGS);
37905b261ecSmrg#endif
38005b261ecSmrg#ifdef XFIXES
38105b261ecSmrgextern void XFixesExtensionInit(INITARGS);
38205b261ecSmrg#endif
38305b261ecSmrg#ifdef DAMAGE
38405b261ecSmrgextern void DamageExtensionInit(INITARGS);
38505b261ecSmrg#endif
38605b261ecSmrg#ifdef COMPOSITE
38705b261ecSmrgextern void CompositeExtensionInit(INITARGS);
38805b261ecSmrg#endif
38905b261ecSmrg
39005b261ecSmrg/* The following is only a small first step towards run-time
39105b261ecSmrg * configurable extensions.
39205b261ecSmrg */
39305b261ecSmrgtypedef struct {
39405b261ecSmrg    char *name;
39505b261ecSmrg    Bool *disablePtr;
39605b261ecSmrg} ExtensionToggle;
39705b261ecSmrg
39805b261ecSmrgstatic ExtensionToggle ExtensionToggleList[] =
39905b261ecSmrg{
40005b261ecSmrg    /* sort order is extension name string as shown in xdpyinfo */
40105b261ecSmrg#ifdef BIGREQS
40205b261ecSmrg    { "BIG-REQUESTS", &noBigReqExtension },
40305b261ecSmrg#endif
40405b261ecSmrg#ifdef COMPOSITE
40505b261ecSmrg    { "Composite", &noCompositeExtension },
40605b261ecSmrg#endif
40705b261ecSmrg#ifdef DAMAGE
40805b261ecSmrg    { "DAMAGE", &noDamageExtension },
40905b261ecSmrg#endif
41005b261ecSmrg#ifdef DBE
41105b261ecSmrg    { "DOUBLE-BUFFER", &noDbeExtension },
41205b261ecSmrg#endif
41305b261ecSmrg#ifdef DPMSExtension
41405b261ecSmrg    { "DPMS", &noDPMSExtension },
41505b261ecSmrg#endif
41605b261ecSmrg#ifdef EVI
41705b261ecSmrg    { "Extended-Visual-Information", &noEVIExtension },
41805b261ecSmrg#endif
41905b261ecSmrg#ifdef FONTCACHE
42005b261ecSmrg    { "FontCache", &noFontCacheExtension },
42105b261ecSmrg#endif
42205b261ecSmrg#ifdef GLXEXT
42305b261ecSmrg    { "GLX", &noGlxExtension },
42405b261ecSmrg#endif
42505b261ecSmrg#ifdef SCREENSAVER
42605b261ecSmrg    { "MIT-SCREEN-SAVER", &noScreenSaverExtension },
42705b261ecSmrg#endif
42805b261ecSmrg#ifdef MITSHM
42905b261ecSmrg    { SHMNAME, &noMITShmExtension },
43005b261ecSmrg#endif
43105b261ecSmrg#ifdef MITMISC
43205b261ecSmrg    { "MIT-SUNDRY-NONSTANDARD", &noMITMiscExtension },
43305b261ecSmrg#endif
43405b261ecSmrg#ifdef MULTIBUFFER
43505b261ecSmrg    { "Multi-Buffering", &noMultibufferExtension },
43605b261ecSmrg#endif
43705b261ecSmrg#ifdef RANDR
43805b261ecSmrg    { "RANDR", &noRRExtension },
43905b261ecSmrg#endif
44005b261ecSmrg#ifdef RENDER
44105b261ecSmrg    { "RENDER", &noRenderExtension },
44205b261ecSmrg#endif
44305b261ecSmrg#ifdef SHAPE
44405b261ecSmrg    { "SHAPE", &noShapeExtension },
44505b261ecSmrg#endif
44605b261ecSmrg#ifdef XCSECURITY
44705b261ecSmrg    { "SECURITY", &noSecurityExtension },
44805b261ecSmrg#endif
44905b261ecSmrg#ifdef XSYNC
45005b261ecSmrg    { "SYNC", &noSyncExtension },
45105b261ecSmrg#endif
45205b261ecSmrg#ifdef TOGCUP
45305b261ecSmrg    { "TOG-CUP", &noXcupExtension },
45405b261ecSmrg#endif
45505b261ecSmrg#ifdef RES
45605b261ecSmrg    { "X-Resource", &noResExtension },
45705b261ecSmrg#endif
45805b261ecSmrg#ifdef XAPPGROUP
45905b261ecSmrg    { "XC-APPGROUP", &noXagExtension },
46005b261ecSmrg#endif
46105b261ecSmrg#ifdef XCMISC
46205b261ecSmrg    { "XC-MISC", &noXCMiscExtension },
46305b261ecSmrg#endif
46405b261ecSmrg#ifdef XEVIE
46505b261ecSmrg    { "XEVIE", &noXevieExtension },
46605b261ecSmrg#endif
46705b261ecSmrg#ifdef XF86BIGFONT
46805b261ecSmrg    { "XFree86-Bigfont", &noXFree86BigfontExtension },
46905b261ecSmrg#endif
47005b261ecSmrg#ifdef XFreeXDGA
47105b261ecSmrg    { "XFree86-DGA", &noXFree86DGAExtension },
47205b261ecSmrg#endif
47305b261ecSmrg#ifdef XF86DRI
47405b261ecSmrg    { "XFree86-DRI", &noXFree86DRIExtension },
47505b261ecSmrg#endif
47605b261ecSmrg#ifdef XF86MISC
47705b261ecSmrg    { "XFree86-Misc", &noXFree86MiscExtension },
47805b261ecSmrg#endif
47905b261ecSmrg#ifdef XF86VIDMODE
48005b261ecSmrg    { "XFree86-VidModeExtension", &noXFree86VidModeExtension },
48105b261ecSmrg#endif
48205b261ecSmrg#ifdef XFIXES
48305b261ecSmrg    { "XFIXES", &noXFixesExtension },
48405b261ecSmrg#endif
48505b261ecSmrg#ifdef PANORAMIX
48605b261ecSmrg    { "XINERAMA", &noPanoramiXExtension },
48705b261ecSmrg#endif
48805b261ecSmrg#ifdef XINPUT
48905b261ecSmrg    { "XInputExtension", &noXInputExtension },
49005b261ecSmrg#endif
49105b261ecSmrg#ifdef XKB
49205b261ecSmrg    { "XKEYBOARD", &noXkbExtension },
49305b261ecSmrg#endif
49405b261ecSmrg    { "XTEST", &noTestExtensions },
49505b261ecSmrg#ifdef XV
49605b261ecSmrg    { "XVideo", &noXvExtension },
49705b261ecSmrg#endif
49805b261ecSmrg    { NULL, NULL }
49905b261ecSmrg};
50005b261ecSmrg
50105b261ecSmrgBool EnableDisableExtension(char *name, Bool enable)
50205b261ecSmrg{
50305b261ecSmrg    ExtensionToggle *ext = &ExtensionToggleList[0];
50405b261ecSmrg
50505b261ecSmrg    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
50605b261ecSmrg	if (strcmp(name, ext->name) == 0) {
50705b261ecSmrg	    *ext->disablePtr = !enable;
50805b261ecSmrg	    return TRUE;
50905b261ecSmrg	}
51005b261ecSmrg    }
51105b261ecSmrg
51205b261ecSmrg    return FALSE;
51305b261ecSmrg}
51405b261ecSmrg
51505b261ecSmrgvoid EnableDisableExtensionError(char *name, Bool enable)
51605b261ecSmrg{
51705b261ecSmrg    ExtensionToggle *ext = &ExtensionToggleList[0];
51805b261ecSmrg
51905b261ecSmrg    ErrorF("Extension \"%s\" is not recognized\n", name);
52005b261ecSmrg    ErrorF("Only the following extensions can be run-time %s:\n",
52105b261ecSmrg	   enable ? "enabled" : "disabled");
52205b261ecSmrg    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++)
52305b261ecSmrg	ErrorF("    %s\n", ext->name);
52405b261ecSmrg}
52505b261ecSmrg
52605b261ecSmrg#ifndef XFree86LOADER
52705b261ecSmrg
52805b261ecSmrg/*ARGSUSED*/
52905b261ecSmrgvoid
53005b261ecSmrgInitExtensions(argc, argv)
53105b261ecSmrg    int		argc;
53205b261ecSmrg    char	*argv[];
53305b261ecSmrg{
53405b261ecSmrg#ifdef XCSECURITY
53505b261ecSmrg    SecurityExtensionSetup();
53605b261ecSmrg#endif
53705b261ecSmrg#ifdef PANORAMIX
53805b261ecSmrg# if !defined(PRINT_ONLY_SERVER) && !defined(NO_PANORAMIX)
53905b261ecSmrg  if (!noPanoramiXExtension) PanoramiXExtensionInit();
54005b261ecSmrg# endif
54105b261ecSmrg#endif
54205b261ecSmrg#ifdef SHAPE
54305b261ecSmrg    if (!noShapeExtension) ShapeExtensionInit();
54405b261ecSmrg#endif
54505b261ecSmrg#ifdef MITSHM
54605b261ecSmrg    if (!noMITShmExtension) ShmExtensionInit();
54705b261ecSmrg#endif
54805b261ecSmrg#ifdef EVI
54905b261ecSmrg    if (!noEVIExtension) EVIExtensionInit();
55005b261ecSmrg#endif
55105b261ecSmrg#ifdef MULTIBUFFER
55205b261ecSmrg    if (!noMultibufferExtension) MultibufferExtensionInit();
55305b261ecSmrg#endif
55405b261ecSmrg#if defined(XINPUT)
55505b261ecSmrg    if (!noXInputExtension) XInputExtensionInit();
55605b261ecSmrg#endif
55705b261ecSmrg#ifdef XTEST
55805b261ecSmrg    if (!noTestExtensions) XTestExtensionInit();
55905b261ecSmrg#endif
56005b261ecSmrg#ifdef BIGREQS
56105b261ecSmrg    if (!noBigReqExtension) BigReqExtensionInit();
56205b261ecSmrg#endif
56305b261ecSmrg#ifdef MITMISC
56405b261ecSmrg    if (!noMITMiscExtension) MITMiscExtensionInit();
56505b261ecSmrg#endif
56605b261ecSmrg#ifdef XIDLE
56705b261ecSmrg    if (!noXIdleExtension) XIdleExtensionInit();
56805b261ecSmrg#endif
56905b261ecSmrg#ifdef XTRAP
57005b261ecSmrg    if (!noTestExtensions) DEC_XTRAPInit();
57105b261ecSmrg#endif
57205b261ecSmrg#if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER)
57305b261ecSmrg    if (!noScreenSaverExtension) ScreenSaverExtensionInit ();
57405b261ecSmrg#endif
57505b261ecSmrg#ifdef XV
57605b261ecSmrg    if (!noXvExtension) {
57705b261ecSmrg      XvExtensionInit();
57805b261ecSmrg      XvMCExtensionInit();
57905b261ecSmrg    }
58005b261ecSmrg#endif
58105b261ecSmrg#ifdef XSYNC
58205b261ecSmrg    if (!noSyncExtension) SyncExtensionInit();
58305b261ecSmrg#endif
58405b261ecSmrg#if defined(XKB) && !defined(PRINT_ONLY_SERVER)
58505b261ecSmrg    if (!noXkbExtension) XkbExtensionInit();
58605b261ecSmrg#endif
58705b261ecSmrg#ifdef XCMISC
58805b261ecSmrg    if (!noXCMiscExtension) XCMiscExtensionInit();
58905b261ecSmrg#endif
59005b261ecSmrg#ifdef XRECORD
59105b261ecSmrg    if (!noTestExtensions) RecordExtensionInit();
59205b261ecSmrg#endif
59305b261ecSmrg#ifdef DBE
59405b261ecSmrg    if (!noDbeExtension) DbeExtensionInit();
59505b261ecSmrg#endif
59605b261ecSmrg#ifdef XAPPGROUP
59705b261ecSmrg    if (!noXagExtension) XagExtensionInit();
59805b261ecSmrg#endif
59905b261ecSmrg#ifdef XACE
60005b261ecSmrg    XaceExtensionInit();
60105b261ecSmrg#endif
60205b261ecSmrg#ifdef XCSECURITY
60305b261ecSmrg    if (!noSecurityExtension) SecurityExtensionInit();
60405b261ecSmrg#endif
60505b261ecSmrg#ifdef XPRINT
60605b261ecSmrg    XpExtensionInit(); /* server-specific extension, cannot be disabled */
60705b261ecSmrg#endif
60805b261ecSmrg#ifdef TOGCUP
60905b261ecSmrg    if (!noXcupExtension) XcupExtensionInit();
61005b261ecSmrg#endif
61105b261ecSmrg#if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS)
61205b261ecSmrg    if (!noDPMSExtension) DPMSExtensionInit();
61305b261ecSmrg#endif
61405b261ecSmrg#ifdef FONTCACHE
61505b261ecSmrg    if (!noFontCacheExtension) FontCacheExtensionInit();
61605b261ecSmrg#endif
61705b261ecSmrg#ifdef XF86BIGFONT
61805b261ecSmrg    if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit();
61905b261ecSmrg#endif
62005b261ecSmrg#if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
62105b261ecSmrg#if defined(XF86VIDMODE)
62205b261ecSmrg    if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit();
62305b261ecSmrg#endif
62405b261ecSmrg#if defined(XF86MISC)
62505b261ecSmrg    if (!noXFree86MiscExtension) XFree86MiscExtensionInit();
62605b261ecSmrg#endif
62705b261ecSmrg#if defined(XFreeXDGA)
62805b261ecSmrg    if (!noXFree86DGAExtension) XFree86DGAExtensionInit();
62905b261ecSmrg#endif
63005b261ecSmrg#ifdef XF86DRI
63105b261ecSmrg    if (!noXFree86DRIExtension) XFree86DRIExtensionInit();
63205b261ecSmrg#endif
63305b261ecSmrg#endif
63405b261ecSmrg
63505b261ecSmrg#ifdef GLXEXT
63605b261ecSmrg#ifdef INXDARWINAPP
63705b261ecSmrg    DarwinGlxPushProvider(__DarwinglXMesaProvider);
63805b261ecSmrg    if (!noGlxExtension) DarwinGlxExtensionInit();
63905b261ecSmrg#else
64005b261ecSmrg    GlxPushProvider(&__glXMesaProvider);
64105b261ecSmrg    if (!noGlxExtension) GlxExtensionInit();
64205b261ecSmrg#endif // INXDARWINAPP
64305b261ecSmrg#endif // GLXEXT
64405b261ecSmrg#ifdef XFIXES
64505b261ecSmrg    /* must be before Render to layer DisplayCursor correctly */
64605b261ecSmrg    if (!noXFixesExtension) XFixesExtensionInit();
64705b261ecSmrg#endif
64805b261ecSmrg#ifdef RENDER
64905b261ecSmrg    if (!noRenderExtension) RenderExtensionInit();
65005b261ecSmrg#endif
65105b261ecSmrg#ifdef RANDR
65205b261ecSmrg    if (!noRRExtension) RRExtensionInit();
65305b261ecSmrg#endif
65405b261ecSmrg#ifdef RES
65505b261ecSmrg    if (!noResExtension) ResExtensionInit();
65605b261ecSmrg#endif
65705b261ecSmrg#ifdef DMXEXT
65805b261ecSmrg    DMXExtensionInit(); /* server-specific extension, cannot be disabled */
65905b261ecSmrg#endif
66005b261ecSmrg#ifdef XEVIE
66105b261ecSmrg    if (!noXevieExtension) XevieExtensionInit();
66205b261ecSmrg#endif
66305b261ecSmrg#ifdef COMPOSITE
66405b261ecSmrg    if (!noCompositeExtension) CompositeExtensionInit();
66505b261ecSmrg#endif
66605b261ecSmrg#ifdef DAMAGE
66705b261ecSmrg    if (!noDamageExtension) DamageExtensionInit();
66805b261ecSmrg#endif
66905b261ecSmrg}
67005b261ecSmrg
67105b261ecSmrgvoid
67205b261ecSmrgInitVisualWrap()
67305b261ecSmrg{
67405b261ecSmrg    miResetInitVisuals();
67505b261ecSmrg#ifdef GLXEXT
67605b261ecSmrg#ifndef __DARWIN__
67705b261ecSmrg    GlxWrapInitVisuals(&miInitVisualsProc);
67805b261ecSmrg#else
67905b261ecSmrg    DarwinGlxWrapInitVisuals(&miInitVisualsProc);
68005b261ecSmrg#endif
68105b261ecSmrg#endif
68205b261ecSmrg}
68305b261ecSmrg
68405b261ecSmrg#else /* XFree86LOADER */
68505b261ecSmrg/* List of built-in (statically linked) extensions */
68605b261ecSmrgstatic ExtensionModule staticExtensions[] = {
68705b261ecSmrg#ifdef MITSHM
68805b261ecSmrg    { ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL, NULL },
68905b261ecSmrg#endif
69005b261ecSmrg#ifdef XINPUT
69105b261ecSmrg    { XInputExtensionInit, "XInputExtension", &noXInputExtension, NULL, NULL },
69205b261ecSmrg#endif
69305b261ecSmrg#ifdef XTEST
69405b261ecSmrg    { XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL, NULL },
69505b261ecSmrg#endif
69605b261ecSmrg#ifdef XIDLE
69705b261ecSmrg    { XIdleExtensionInit, "XIDLE", &noXIdleExtension, NULL, NULL },
69805b261ecSmrg#endif
69905b261ecSmrg#ifdef XKB
70005b261ecSmrg    { XkbExtensionInit, XkbName, &noXkbExtension, NULL, NULL },
70105b261ecSmrg#endif
70205b261ecSmrg#ifdef XAPPGROUP
70305b261ecSmrg    { XagExtensionInit, XAGNAME, &noXagExtension, NULL, NULL },
70405b261ecSmrg#endif
70505b261ecSmrg#ifdef XACE
70605b261ecSmrg    { XaceExtensionInit, XACE_EXTENSION_NAME, NULL, NULL, NULL },
70705b261ecSmrg#endif
70805b261ecSmrg#ifdef XCSECURITY
70905b261ecSmrg    { SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, SecurityExtensionSetup, NULL },
71005b261ecSmrg#endif
71105b261ecSmrg#ifdef XPRINT
71205b261ecSmrg    { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL },
71305b261ecSmrg#endif
71405b261ecSmrg#ifdef PANORAMIX
71505b261ecSmrg    { PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension, NULL, NULL },
71605b261ecSmrg#endif
71705b261ecSmrg#ifdef XFIXES
71805b261ecSmrg    /* must be before Render to layer DisplayCursor correctly */
71905b261ecSmrg    { XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL, NULL },
72005b261ecSmrg#endif
72105b261ecSmrg#ifdef XF86BIGFONT
72205b261ecSmrg    { XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension, NULL, NULL },
72305b261ecSmrg#endif
72405b261ecSmrg#ifdef RENDER
72505b261ecSmrg    { RenderExtensionInit, "RENDER", &noRenderExtension, NULL, NULL },
72605b261ecSmrg#endif
72705b261ecSmrg#ifdef RANDR
72805b261ecSmrg    { RRExtensionInit, "RANDR", &noRRExtension, NULL, NULL },
72905b261ecSmrg#endif
73005b261ecSmrg#ifdef COMPOSITE
73105b261ecSmrg    { CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL },
73205b261ecSmrg#endif
73305b261ecSmrg#ifdef DAMAGE
73405b261ecSmrg    { DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL },
73505b261ecSmrg#endif
73605b261ecSmrg#ifdef XEVIE
73705b261ecSmrg    { XevieExtensionInit, "XEVIE", &noXevieExtension, NULL },
73805b261ecSmrg#endif
73905b261ecSmrg    { NULL, NULL, NULL, NULL, NULL }
74005b261ecSmrg};
74105b261ecSmrg
74205b261ecSmrg/*ARGSUSED*/
74305b261ecSmrgvoid
74405b261ecSmrgInitExtensions(argc, argv)
74505b261ecSmrg    int		argc;
74605b261ecSmrg    char	*argv[];
74705b261ecSmrg{
74805b261ecSmrg    int i;
74905b261ecSmrg    ExtensionModule *ext;
75005b261ecSmrg    static Bool listInitialised = FALSE;
75105b261ecSmrg
75205b261ecSmrg    if (!listInitialised) {
75305b261ecSmrg	/* Add built-in extensions to the list. */
75405b261ecSmrg	for (i = 0; staticExtensions[i].name; i++)
75505b261ecSmrg	    LoadExtension(&staticExtensions[i], TRUE);
75605b261ecSmrg
75705b261ecSmrg	/* Sort the extensions according the init dependencies. */
75805b261ecSmrg	LoaderSortExtensions();
75905b261ecSmrg	listInitialised = TRUE;
76005b261ecSmrg    } else {
76105b261ecSmrg	/* Call the setup functions on subsequent server resets as well */
76205b261ecSmrg	for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
76305b261ecSmrg	    ext = &ExtensionModuleList[i];
76405b261ecSmrg	    if (ext->setupFunc != NULL &&
76505b261ecSmrg		(ext->disablePtr == NULL ||
76605b261ecSmrg		 (ext->disablePtr != NULL && !*ext->disablePtr))) {
76705b261ecSmrg		(ext->setupFunc)();
76805b261ecSmrg	    }
76905b261ecSmrg	}
77005b261ecSmrg    }
77105b261ecSmrg
77205b261ecSmrg    for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
77305b261ecSmrg	ext = &ExtensionModuleList[i];
77405b261ecSmrg	if (ext->initFunc != NULL &&
77505b261ecSmrg	    (ext->disablePtr == NULL ||
77605b261ecSmrg	     (ext->disablePtr != NULL && !*ext->disablePtr))) {
77705b261ecSmrg	    (ext->initFunc)();
77805b261ecSmrg	}
77905b261ecSmrg    }
78005b261ecSmrg}
78105b261ecSmrg
78205b261ecSmrgstatic void (*__miHookInitVisualsFunction)(miInitVisualsProcPtr *);
78305b261ecSmrg
78405b261ecSmrgvoid
78505b261ecSmrgInitVisualWrap()
78605b261ecSmrg{
78705b261ecSmrg    miResetInitVisuals();
78805b261ecSmrg    if (__miHookInitVisualsFunction)
78905b261ecSmrg	(*__miHookInitVisualsFunction)(&miInitVisualsProc);
79005b261ecSmrg}
79105b261ecSmrg
79205b261ecSmrg_X_EXPORT void
79305b261ecSmrgmiHookInitVisuals(void (**old)(miInitVisualsProcPtr *),
79405b261ecSmrg		  void (*new)(miInitVisualsProcPtr *))
79505b261ecSmrg{
79605b261ecSmrg    if (old)
79705b261ecSmrg	*old = __miHookInitVisualsFunction;
79805b261ecSmrg    __miHookInitVisualsFunction = new;
79905b261ecSmrg}
80005b261ecSmrg
80105b261ecSmrg#endif /* XFree86LOADER */
802