diff options
author | antirez <antirez> | 2005-03-02 19:27:19 +0000 |
---|---|---|
committer | antirez <antirez> | 2005-03-02 19:27:19 +0000 |
commit | 83c8e8e0391e59ba26ad10f105ef949fba281a2d (patch) | |
tree | fe5c3d2e2081a39ae45a0009a1325460d6a2acee | |
parent | a6694dabfd53401074f8d9ead211f2981a4c112a (diff) | |
download | jimtcl-83c8e8e0391e59ba26ad10f105ef949fba281a2d.zip jimtcl-83c8e8e0391e59ba26ad10f105ef949fba281a2d.tar.gz jimtcl-83c8e8e0391e59ba26ad10f105ef949fba281a2d.tar.bz2 |
shell and library splitted. Now jim.c contains only the
language implementation, while the shell is into jimsh.c,
that is actually the first example of embedder of Jim.
Important changes in jim.h to make Jim play well with
extensions/embedders at the same time, and to deal
with multiple files.
Extensions now must define JIM_EXTENSION before to include
jim.h, embedders must define JIM_EMBEDDED before to include jim.h.
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | jim-posix.c | 1 | ||||
-rw-r--r-- | jim-win32.c | 1 | ||||
-rw-r--r-- | jim-win32com.c | 1 | ||||
-rw-r--r-- | jim.c | 17 | ||||
-rw-r--r-- | jim.h | 26 |
6 files changed, 41 insertions, 7 deletions
@@ -14,7 +14,7 @@ INSTALL_DATA= $(INSTALL) -m 644 DESTDIR= /usr/local/bin/ PROGRAMS= jim -JIM_OBJECTS= jim.o +JIM_OBJECTS= jim.o jimsh.o stopit: @echo "Use:" diff --git a/jim-posix.c b/jim-posix.c index 5e942aa..ca230e4 100644 --- a/jim-posix.c +++ b/jim-posix.c @@ -3,6 +3,7 @@ #include <string.h> #include <errno.h> +#define JIM_EXTENSION #include "jim.h" extern int errno; diff --git a/jim-win32.c b/jim-win32.c index c336014..4cbf481 100644 --- a/jim-win32.c +++ b/jim-win32.c @@ -26,6 +26,7 @@ #include <psapi.h> #include <ctype.h> +#define JIM_EXTENSION #include "jim.h" #if _MSC_VER >= 1000 diff --git a/jim-win32com.c b/jim-win32com.c index 3bab6e8..b2fd692 100644 --- a/jim-win32com.c +++ b/jim-win32com.c @@ -25,6 +25,7 @@ #include <stdarg.h> #include <ctype.h> +#define JIM_EXTENSION #include "jim.h" #if _MSC_VER >= 1000 @@ -3661,6 +3661,15 @@ Jim_Interp *Jim_CreateInterp(void) return i; } +/* This is the only function Jim exports directly without + * to use the STUB system. It is only used by embedders + * in order to get an interpreter with the Jim API pointers + * registered. */ +Jim_Interp *ExportedJimCreateInterp(void) +{ + return Jim_CreateInterp(); +} + void Jim_FreeInterp(Jim_Interp *i) { Jim_CallFrame *cf = i->framePtr, *prevcf, *nextcf; @@ -6914,6 +6923,8 @@ void JimRegisterCoreApi(Jim_Interp *interp) { interp->getApiFuncPtr = Jim_GetApi; Jim_RegisterApi(interp, "Jim_Alloc", Jim_Alloc); + Jim_RegisterApi(interp, "Jim_Eval", Jim_Eval); + Jim_RegisterApi(interp, "Jim_EvalFile", Jim_EvalFile); Jim_RegisterApi(interp, "Jim_EvalObj", Jim_EvalObj); Jim_RegisterApi(interp, "Jim_EvalObjVector", Jim_EvalObjVector); Jim_RegisterApi(interp, "Jim_InitHashTable", Jim_InitHashTable); @@ -6982,8 +6993,8 @@ void JimRegisterCoreApi(Jim_Interp *interp) Jim_RegisterApi(interp, "Jim_SetDictKeysVector", Jim_SetDictKeysVector); Jim_RegisterApi(interp, "Jim_SubstObj", Jim_SubstObj); Jim_RegisterApi(interp, "Jim_RegisterApi", Jim_RegisterApi); - Jim_RegisterApi(interp, "Jim_PrintErrorMessage", Jim_RegisterApi); - Jim_RegisterApi(interp, "Jim_InteractivePrompt", Jim_RegisterApi); + Jim_RegisterApi(interp, "Jim_PrintErrorMessage", Jim_PrintErrorMessage); + Jim_RegisterApi(interp, "Jim_InteractivePrompt", Jim_InteractivePrompt); } /* ----------------------------------------------------------------------------- @@ -8523,6 +8534,7 @@ int Jim_InteractivePrompt(void) return 0; } +#if 0 int main(int argc, char **argv) { int retcode; @@ -8561,3 +8573,4 @@ int main(int argc, char **argv) Jim_FreeInterp(interp); return retcode; } +#endif @@ -445,11 +445,16 @@ typedef struct Jim_Reference { #define Jim_FreeHashTableIterator(iter) Jim_Free(iter) #ifndef __JIM_CORE__ -#define JIM_API(x) (*x) -#define JIM_STATIC +# if defined JIM_EXTENSION || defined JIM_EMBEDDED +# define JIM_API(x) (*x) +# define JIM_STATIC +# else +# define JIM_API(x) (*x) +# define JIM_STATIC extern +# endif #else -#define JIM_API(x) x -#define JIM_STATIC static +# define JIM_API(x) x +# define JIM_STATIC static #endif /* __JIM_CORE__ */ /* Memory allocation */ @@ -457,6 +462,8 @@ JIM_STATIC void * JIM_API(Jim_Alloc) (int size); JIM_STATIC char * JIM_API(Jim_StrDup) (char *s); /* evaluation */ +JIM_STATIC int JIM_API(Jim_Eval)(Jim_Interp *interp, char *script); +JIM_STATIC int JIM_API(Jim_EvalFile)(Jim_Interp *interp, char *filename); JIM_STATIC int JIM_API(Jim_EvalObj) (Jim_Interp *interp, Jim_Obj *scriptObjPtr); JIM_STATIC int JIM_API(Jim_EvalObjVector) (Jim_Interp *interp, int objc, Jim_Obj **objv); @@ -639,6 +646,8 @@ static void Jim_InitExtension(Jim_Interp *interp, char *version) Jim_GetApi = interp->getApiFuncPtr; Jim_Alloc = Jim_GetApi(interp, "Jim_Alloc"); + Jim_Eval = Jim_GetApi(interp, "Jim_Eval"); + Jim_EvalFile = Jim_GetApi(interp, "Jim_EvalFile"); Jim_EvalObj = Jim_GetApi(interp, "Jim_EvalObj"); Jim_EvalObjVector = Jim_GetApi(interp, "Jim_EvalObjVector"); Jim_InitHashTable = Jim_GetApi(interp, "Jim_InitHashTable"); @@ -711,6 +720,15 @@ static void Jim_InitExtension(Jim_Interp *interp, char *version) Jim_InteractivePrompt = Jim_GetApi(interp, "Jim_InteractivePrompt"); Jim_SetResultString(interp, version, -1); } + +#ifdef JIM_EMBEDDED +Jim_Interp *ExportedJimCreateInterp(void); +static void Jim_InitEmbedded(void) { + Jim_Interp *i = ExportedJimCreateInterp(); + Jim_InitExtension(i, ""); + Jim_FreeInterp(i); +} +#endif /* JIM_EMBEDDED */ #endif /* __JIM_CORE__ */ #endif /* __JIM__H */ |