diff options
Diffstat (limited to 'generic/tkStubLib.c')
-rw-r--r-- | generic/tkStubLib.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/generic/tkStubLib.c b/generic/tkStubLib.c new file mode 100644 index 0000000..85e5d99 --- /dev/null +++ b/generic/tkStubLib.c @@ -0,0 +1,102 @@ +/* + * tkStubLib.c -- + * + * Stub object that will be statically linked into extensions that wish + * to access Tk. + * + * Copyright (c) 1998 Paul Duffin. + * Copyright (c) 1998-1999 by Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id: tkStubLib.c,v 1.2 1999/03/10 07:04:43 stanton Exp $ + */ + +/* + * We need to ensure that we use the stub macros so that this file contains + * no references to any of the stub functions. This will make it possible + * to build an extension that references Tk_InitStubs but doesn't end up + * including the rest of the stub functions. + */ + + +#ifndef USE_TK_STUBS +#define USE_TK_STUBS +#endif +#undef USE_TK_STUB_PROCS + +#include "tkInt.h" +#include "tkPort.h" + +#ifdef __WIN32__ +#include "tkWinInt.h" +#endif + +#include "tkDecls.h" +#include "tkIntDecls.h" +#include "tkPlatDecls.h" +#include "tkIntPlatDecls.h" +#include "tkIntXlibDecls.h" + +/* + * Ensure that Tk_InitStubs is built as an exported symbol. The other stub + * functions should be built as non-exported symbols. + */ + +#undef TCL_STORAGE_CLASS +#define TCL_STORAGE_CLASS DLLEXPORT + +TkStubs *tkStubsPtr; +TkPlatStubs *tkPlatStubsPtr; +TkIntStubs *tkIntStubsPtr; +TkIntPlatStubs *tkIntPlatStubsPtr; +TkIntXlibStubs *tkIntXlibStubsPtr; + + +/* + *---------------------------------------------------------------------- + * + * Tk_InitStubs -- + * + * Checks that the correct version of Tk is loaded and that it + * supports stubs. It then initialises the stub table pointers. + * + * Results: + * The actual version of Tk that satisfies the request, or + * NULL to indicate that an error occurred. + * + * Side effects: + * Sets the stub table pointers. + * + *---------------------------------------------------------------------- + */ + +char * +Tk_InitStubs(interp, version, exact) + Tcl_Interp *interp; + char *version; + int exact; +{ + char *actualVersion; + + actualVersion = Tcl_PkgRequireEx(interp, "Tk", version, exact, + (ClientData *) &tkStubsPtr); + if (!actualVersion) { + return NULL; + } + + if (!tkStubsPtr) { + Tcl_SetResult(interp, + "This implementation of Tk does not support stubs", + TCL_STATIC); + return NULL; + } + + tkPlatStubsPtr = tkStubsPtr->hooks->tkPlatStubs; + tkIntStubsPtr = tkStubsPtr->hooks->tkIntStubs; + tkIntPlatStubsPtr = tkStubsPtr->hooks->tkIntPlatStubs; + tkIntXlibStubsPtr = tkStubsPtr->hooks->tkIntXlibStubs; + + return actualVersion; +} |