1 /*
2  * trfStubLib.c --
3  *
4  *	Stub object that will be statically linked into extensions that wish
5  *	to access Trf.
6  */
7 
8 
9 /*
10  * We need to ensure that we use the stub macros so that this file contains
11  * no references to any of the stub functions.  This will make it possible
12  * to build an extension that references Trf_InitStubs but doesn't end up
13  * including the rest of the stub functions.
14  */
15 
16 #ifndef USE_TCL_STUBS
17 #define USE_TCL_STUBS
18 #endif
19 #undef  USE_TCL_STUB_PROCS
20 
21 #ifndef USE_TRF_STUBS
22 #define USE_TRF_STUBS
23 #endif
24 #undef  USE_TRF_STUB_PROCS
25 
26 #include "transform.h"
27 #include "trfIntDecls.h"
28 
29 /*
30  * Ensure that Trf_InitStubs is built as an exported symbol.  The other stub
31  * functions should be built as non-exported symbols.
32  */
33 
34 #undef  TCL_STORAGE_CLASS
35 #define TCL_STORAGE_CLASS DLLEXPORT
36 
37 TrfStubs *trfStubsPtr;
38 TrfIntStubs *trfIntStubsPtr;
39 
40 
41 /*
42  *----------------------------------------------------------------------
43  *
44  * Trf_InitStubs --
45  *
46  *	Checks that the correct version of Trf is loaded and that it
47  *	supports stubs. It then initialises the stub table pointers.
48  *
49  * Results:
50  *	The actual version of Trf that satisfies the request, or
51  *	NULL to indicate that an error occurred.
52  *
53  * Side effects:
54  *	Sets the stub table pointers.
55  *
56  *----------------------------------------------------------------------
57  */
58 
59 #ifdef Trf_InitStubs
60 #undef Trf_InitStubs
61 #endif
62 
63 CONST char *
Trf_InitStubs(interp,version,exact)64 Trf_InitStubs(interp, version, exact)
65     Tcl_Interp *interp;
66     CONST char *version;
67     int exact;
68 {
69     CONST char *actualVersion;
70 
71     actualVersion = Tcl_PkgRequireEx(interp, "Trf", (char *) version, exact,
72 		(ClientData *) &trfStubsPtr);
73 
74     if (!actualVersion) {
75 	return NULL;
76     }
77 
78     if (!trfStubsPtr) {
79 	Tcl_SetResult(interp,
80 		"This implementation of Trf does not support stubs",
81 		TCL_STATIC);
82 	return NULL;
83     }
84 
85     trfIntStubsPtr = trfStubsPtr->hooks->trfIntStubs;
86 
87     return (char*) actualVersion;
88 }
89