summaryrefslogtreecommitdiffstats
path: root/generic/tkStubLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tkStubLib.c')
-rw-r--r--generic/tkStubLib.c102
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;
+}