aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez>2005-03-02 19:27:19 +0000
committerantirez <antirez>2005-03-02 19:27:19 +0000
commit83c8e8e0391e59ba26ad10f105ef949fba281a2d (patch)
treefe5c3d2e2081a39ae45a0009a1325460d6a2acee
parenta6694dabfd53401074f8d9ead211f2981a4c112a (diff)
downloadjimtcl-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--Makefile2
-rw-r--r--jim-posix.c1
-rw-r--r--jim-win32.c1
-rw-r--r--jim-win32com.c1
-rw-r--r--jim.c17
-rw-r--r--jim.h26
6 files changed, 41 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index fcfadee..2d8dd56 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/jim.c b/jim.c
index 399bfdd..ace2ff8 100644
--- a/jim.c
+++ b/jim.c
@@ -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
diff --git a/jim.h b/jim.h
index 141da9e..36892ef 100644
--- a/jim.h
+++ b/jim.h
@@ -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 */