aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */