aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--jim-aio.c97
-rw-r--r--jim-eventloop.c9
-rw-r--r--jim-eventloop.h45
-rw-r--r--jim-interactive.c62
-rw-r--r--jim-posix.c28
-rw-r--r--jim-readdir.c3
-rw-r--r--jim-readline.c3
-rw-r--r--jim-regexp.c3
-rw-r--r--jim-sqlite3.c3
-rw-r--r--jim.c841
-rw-r--r--jim.h720
-rw-r--r--jimsh.c8
-rw-r--r--project.spec0
14 files changed, 308 insertions, 1516 deletions
diff --git a/Makefile b/Makefile
index 7ad11b9..9eabe55 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ INSTALL_DATA= $(INSTALL) -m 644
DESTDIR = /usr/local/bin/
PROGRAMS = jim jim.exe
-JIM_OBJECTS = jim.o jimsh.o
+JIM_OBJECTS = jim.o jimsh.o jim-interactive.o
LIBS = -ldl
stopit:
diff --git a/jim-aio.c b/jim-aio.c
index 88ccda0..73df769 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -112,7 +112,6 @@ static int JimAioFileEventHandler(Jim_Interp *interp, void *clientData, int mask
} else {
Jim_ListIndex(interp, objPtr, 0, &scrPtr, 0);
}
- // fprintf(stderr,"mask:%d\n",mask);
Jim_EvalObjBackground(interp, scrPtr);
return 0;
}
@@ -132,17 +131,14 @@ static void JimAioDelProc(Jim_Interp *interp, void *privData)
if (!af->OpenFlags == AIO_FDOPEN) // fp = fdopen(fd) !!
close(af->fd);
if (af->rEvent) { // remove existing EventHandlers
- fprintf(stderr,"deleting ReadEvent\n");
Jim_DeleteFileHandler(interp,af->fp);
Jim_DecrRefCount(interp,af->rEvent);
}
if (af->wEvent) {
- fprintf(stderr,"deleting WriteEvent\n");
Jim_DeleteFileHandler(interp,af->fp);
Jim_DecrRefCount(interp,af->wEvent);
}
if (af->eEvent) {
- fprintf(stderr,"deleting ExceptionEvent\n");
Jim_DeleteFileHandler(interp,af->fp);
Jim_DecrRefCount(interp,af->eEvent);
}
@@ -422,10 +418,6 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
const char *dummy = NULL;
int scrlen = 0;
- if (!(Jim_CreateFileHandler && Jim_DeleteFileHandler)) {
- Jim_SetResultString(interp, "Eventloop not present ( or loaded too late ) !", -1);
- return JIM_ERR;
- }
switch (option) {
case OPT_READABLE: mask = JIM_EVENT_READABLE; scrListObjpp = &af->rEvent;
if (argc == 4) mask |= JIM_EVENT_FEOF ; break;
@@ -445,33 +437,23 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
} else {
*scrListObjpp = Jim_NewListObj(interp, NULL, 0);
Jim_IncrRefCount(*scrListObjpp);
- // fprintf(stderr,"0 %p \n",*scrListObjpp);
listObj = argv[2];
if (Jim_IsShared(listObj))
listObj = Jim_DuplicateObj(interp, listObj);
// Jim_IncrRefCount(listObj);
- // fprintf(stderr,"script:\"%s\" argp: %p objp1: %p\n", Jim_GetString(argv[2], NULL),argv[2],listObj);
- // fprintf(stderr,"1");
Jim_ListAppendElement(interp,*scrListObjpp,listObj);
- // fprintf(stderr,"2");
if (mask & JIM_EVENT_FEOF) {
listObj = argv[3];
if (Jim_IsShared(listObj))
listObj = Jim_DuplicateObj(interp, listObj);
// Jim_IncrRefCount(listObj);
- // fprintf(stderr,"script:\"%s\" argp: %p objp2: %p\n", Jim_GetString(argv[3], NULL),argv[3],listObj);
- // fprintf(stderr,"3");
Jim_ListAppendElement(interp,*scrListObjpp,listObj);
- // fprintf(stderr,"4");
}
- // fprintf(stderr,"event readable fd: %d, script:\"%s\" objp3: %p\n",af->fd, Jim_GetString(argv[2], NULL),argv[2]);
Jim_IncrRefCount(*scrListObjpp);
- // fprintf(stderr,"6 %p \n",Jim_CreateFileHandler);
Jim_CreateFileHandler(interp, af->fp, mask,
JimAioFileEventHandler,
*scrListObjpp,
JimAioFileEventFinalizer);
- // fprintf(stderr,"7");
}
break;
case 2:
@@ -484,9 +466,7 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
}
} else if (option == OPT_ACCEPT) {
int ret;
- fprintf(stderr,"ACCEPT\n");
ret = JimAioAcceptHelper(interp,af);
- fprintf(stderr,"ret %d\n",ret);
return (ret);
}
return JIM_OK;
@@ -547,7 +527,6 @@ static int JimAioOpenCommand(Jim_Interp *interp, int argc,
af->fd = fileno(fp);
af->flags = fcntl(af->fd,F_GETFL);
af->OpenFlags = OpenFlags;
- // fprintf(stderr,"hallo\n");
af->rEvent = NULL;
af->wEvent = NULL;
af->eEvent = NULL;
@@ -563,29 +542,28 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc,
FILE *fp;
AioFile *af;
char buf[AIO_CMD_LEN];
- char *hdlfmt;
- // const char *mode = "r";
+ char *hdlfmt = "unknown";
Jim_Obj *objPtr;
long fileId;
const char *socktypes[] = {
- "file",
- "pipe",
- "tty",
- "domain",
- "dgram",
- "stream",
- "stream.server",
-
- NULL
+ "file",
+ "pipe",
+ "tty",
+ "domain",
+ "dgram",
+ "stream",
+ "stream.server",
+
+ NULL
};
enum {
- FILE_FILE,
- FILE_PIPE,
- FILE_TTY,
- SOCK_DOMAIN,
- SOCK_DGRAM_CL,
- SOCK_STREAM_CL,
- SOCK_STREAM_SERV
+ FILE_FILE,
+ FILE_PIPE,
+ FILE_TTY,
+ SOCK_DOMAIN,
+ SOCK_DGRAM_CL,
+ SOCK_STREAM_CL,
+ SOCK_STREAM_SERV
};
int socktype;
int sock;
@@ -613,42 +591,33 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc,
if (Jim_GetEnum(interp, argv[1], socktypes, &socktype, "socket type",
JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
- fprintf(stderr,"socktype: %s \n",socktypes[socktype]);
hostportarg = Jim_GetString(argv[2], &hostportlen);
- fprintf(stderr,"hostportarg: %s %d \n",hostportarg,hostportlen);
switch (sscanf(hostportarg,"%[^:]:%[^:]:%[^:]",a,b,c)) {
- case 3: stsrcport = a; sthost = b; stport = c; break;
- case 2: stsrcport = np; sthost = a; stport = b; break;
- case 1: stsrcport = np; sthost = nh; stport = a; break;
- default:
+ case 3: stsrcport = a; sthost = b; stport = c; break;
+ case 2: stsrcport = np; sthost = a; stport = b; break;
+ case 1: stsrcport = np; sthost = nh; stport = a; break;
+ default:
return JIM_ERR;
}
- fprintf(stderr,"socktype: %d srcport: %s host:%s port %s \n",
- socktype,stsrcport,sthost,stport);
if (0 == strncmp(sthost,"ANY",3))
sthost = "0.0.0.0";
srcport = atol(stsrcport);
port = atol(stport);
he = gethostbyname(sthost);
/* FIX!!!! this still results in null pointer exception here.
- /* FIXED!!!! debug output but no JIM_ERR done UK.
+ FIXED!!!! debug output but no JIM_ERR done UK.
if (!he) {
Jim_SetResultString(interp,hstrerror(h_errno),-1);
return JIM_ERR;
}
-
- fprintf(stderr,"Official name is: %s\n", he->h_name);
- fprintf(stderr,"IP address: %s\n", inet_ntoa(*(struct in_addr*)he->h_addr));
*/
sock = socket(PF_INET,SOCK_STREAM,0);
- fprintf(stderr,"srcp: %x port: %x IP: %x sock: %d type: %d\n",srcport,port,he->h_addr,sock,socktype);
switch (socktype) {
case SOCK_DGRAM_CL:
- hdlfmt = "aio.sockdgram%ld" ;
+ hdlfmt = "aio.sockdgram%ld" ;
break;
case SOCK_STREAM_CL:
- fprintf(stderr,"setting up client socket\n");
sa.sin_family= he->h_addrtype;
bcopy(he->h_addr,(char *)&sa.sin_addr,he->h_length); /* set address */
sa.sin_port = htons(port);
@@ -661,7 +630,6 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc,
hdlfmt = "aio.sockstrm%ld" ;
break;
case SOCK_STREAM_SERV:
- fprintf(stderr,"setting up listening socket\n");
sa.sin_family= he->h_addrtype;
bcopy(he->h_addr,(char *)&sa.sin_addr,he->h_length); /* set address */
sa.sin_port = htons(port);
@@ -681,7 +649,6 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc,
break;
}
fp = fdopen(sock, "r+" );
- fprintf(stderr,"fp: %p \n",fp);
if (fp == NULL) {
close(sock);
JimAioSetError(interp);
@@ -701,12 +668,10 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc,
af->fd = sock;
af->OpenFlags = AIO_FDOPEN;
af->flags = fcntl(af->fd,F_GETFL);
- fprintf(stderr,"hallo\n");
af->rEvent = NULL;
af->wEvent = NULL;
af->eEvent = NULL;
sprintf(buf, hdlfmt, fileId);
- fprintf(stderr,"hallo:%s\n",buf);
Jim_CreateCommand(interp, buf, JimAioHandlerCommand, af, JimAioDelProc);
Jim_SetResultString(interp, buf, -1);
return JIM_OK;
@@ -720,21 +685,17 @@ static int JimAioAcceptHelper(Jim_Interp *interp, AioFile *serv_af )
char buf[AIO_CMD_LEN];
Jim_Obj *objPtr;
long fileId;
- fprintf(stderr,"accepting connection for %d \n",serv_af->fd);
sock = accept(serv_af->fd,(struct sockaddr*)&serv_af->sa,&addrlen);
- fprintf(stderr,"done, got %d \n",sock);
if (sock < 0)
- return JIM_ERR;
+ return JIM_ERR;
/* Get the next file id */
- fprintf(stderr,"getting fileid:");
if (Jim_EvalGlobal(interp,
"if {[catch {incr aio.fileId}]} {set aio.fileId 0}") != JIM_OK)
return JIM_ERR;
objPtr = Jim_GetGlobalVariableStr(interp, "aio.fileId", JIM_ERRMSG);
if (objPtr == NULL) return JIM_ERR;
if (Jim_GetLong(interp, objPtr, &fileId) != JIM_OK) return JIM_ERR;
- fprintf(stderr," %ld\n", fileId);
/* Create the file command */
af = Jim_Alloc(sizeof(*af));
@@ -742,28 +703,18 @@ static int JimAioAcceptHelper(Jim_Interp *interp, AioFile *serv_af )
af->fp = fdopen(sock,"r+");
af->OpenFlags = AIO_FDOPEN;
af->flags = fcntl(af->fd,F_GETFL);
- // fprintf(stderr,"hallo\n");
af->rEvent = NULL;
af->wEvent = NULL;
af->eEvent = NULL;
sprintf(buf, "aio.sockstream%ld", fileId);
Jim_CreateCommand(interp, buf, JimAioHandlerCommand, af, JimAioDelProc);
Jim_SetResultString(interp, buf, -1);
- fprintf(stderr,"returning\n");
return JIM_OK;
}
DLLEXPORT int
-#ifndef JIM_STATICEXT
-Jim_OnLoad(Jim_Interp *interp)
-#else
Jim_AioInit(Jim_Interp *interp)
-#endif
{
-#ifndef JIM_STATICEXT
- Jim_InitExtension(interp);
- Jim_ImportEventloopAPI(interp);
-#endif
if (Jim_PackageProvide(interp, "aio", "1.0", JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
Jim_CreateCommand(interp, "aio.open", JimAioOpenCommand, NULL, NULL);
diff --git a/jim-eventloop.c b/jim-eventloop.c
index 2dbb47c..aafdf2a 100644
--- a/jim-eventloop.c
+++ b/jim-eventloop.c
@@ -520,11 +520,10 @@ static int JimELAfterCommand(Jim_Interp *interp, int argc,
return JIM_OK;
}
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_EventloopInit(Jim_Interp *interp)
{
Jim_EventLoop *eventLoop;
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "eventloop", "1.0", JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
@@ -537,11 +536,5 @@ int Jim_OnLoad(Jim_Interp *interp)
Jim_CreateCommand(interp, "vwait", JimELVwaitCommand, NULL, NULL);
Jim_CreateCommand(interp, "after", JimELAfterCommand, NULL, NULL);
- /* Export events API */
- Jim_RegisterApi(interp, "Jim_CreateFileHandler", Jim_CreateFileHandler);
- Jim_RegisterApi(interp, "Jim_DeleteFileHandler", Jim_DeleteFileHandler);
- Jim_RegisterApi(interp, "Jim_CreateTimeHandler", Jim_CreateTimeHandler);
- Jim_RegisterApi(interp, "Jim_DeleteTimeHandler", Jim_DeleteTimeHandler);
- Jim_RegisterApi(interp, "Jim_ProcessEvents", Jim_ProcessEvents);
return JIM_OK;
}
diff --git a/jim-eventloop.h b/jim-eventloop.h
index e09170e..05e8c59 100644
--- a/jim-eventloop.h
+++ b/jim-eventloop.h
@@ -63,52 +63,17 @@ typedef void Jim_EventFinalizerProc(Jim_Interp *interp, void *clientData);
#define JIM_EVENT_EXCEPTION 4
#define JIM_EVENT_FEOF 8
-#ifndef __JIM_EVENTLOOP_CORE__
-# 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
-#endif /* __JIM_EVENTLOOP_CORE__ */
-
-JIM_STATIC void JIM_API(Jim_CreateFileHandler) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_CreateFileHandler) (Jim_Interp *interp,
void *handle, int mask,
Jim_FileProc *proc, void *clientData,
Jim_EventFinalizerProc *finalizerProc);
-JIM_STATIC void JIM_API(Jim_DeleteFileHandler) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_DeleteFileHandler) (Jim_Interp *interp,
void *handle);
-JIM_STATIC jim_wide JIM_API(Jim_CreateTimeHandler) (Jim_Interp *interp,
+JIM_EXPORT jim_wide JIM_API(Jim_CreateTimeHandler) (Jim_Interp *interp,
jim_wide milliseconds,
Jim_TimeProc *proc, void *clientData,
Jim_EventFinalizerProc *finalizerProc);
-JIM_STATIC jim_wide JIM_API(Jim_DeleteTimeHandler) (Jim_Interp *interp, jim_wide id);
-JIM_STATIC int JIM_API(Jim_ProcessEvents) (Jim_Interp *interp, int flags);
-
-#undef JIM_STATIC
-#undef JIM_API
-
-#ifndef __JIM_EVENTLOOP_CORE__
-
-#define JIM_GET_API(name) \
- Jim_GetApi(interp, "Jim_" #name, ((void *)&Jim_ ## name))
-
-#if defined(JIM_EXTENSION) || defined(JIM_EMBEDDED)
-/* This must be included "inline" inside the extension */
-static void Jim_ImportEventloopAPI(Jim_Interp *interp)
-{
- JIM_GET_API(CreateFileHandler);
- JIM_GET_API(DeleteFileHandler);
- JIM_GET_API(CreateTimeHandler);
- JIM_GET_API(DeleteTimeHandler);
- JIM_GET_API(ProcessEvents);
-}
-#endif /* defined JIM_EXTENSION || defined JIM_EMBEDDED */
-#undef JIM_GET_API
-#endif /* __JIM_EVENTLOOP_CORE__ */
+JIM_EXPORT jim_wide JIM_API(Jim_DeleteTimeHandler) (Jim_Interp *interp, jim_wide id);
+JIM_EXPORT int JIM_API(Jim_ProcessEvents) (Jim_Interp *interp, int flags);
#endif /* __JIM_EVENTLOOP_H__ */
diff --git a/jim-interactive.c b/jim-interactive.c
new file mode 100644
index 0000000..89b133a
--- /dev/null
+++ b/jim-interactive.c
@@ -0,0 +1,62 @@
+#include <jim.h>
+
+int Jim_InteractivePrompt(Jim_Interp *interp)
+{
+ int retcode = JIM_OK;
+ Jim_Obj *scriptObjPtr;
+
+ printf("Welcome to Jim version %d.%d, "
+ "Copyright (c) 2005-8 Salvatore Sanfilippo" JIM_NL,
+ JIM_VERSION / 100, JIM_VERSION % 100);
+ Jim_SetVariableStrWithStr(interp, "jim_interactive", "1");
+ while (1) {
+ char buf[1024];
+ const char *result;
+ const char *retcodestr[] = {
+ "ok", "error", "return", "break", "continue", "eval", "exit"
+ };
+ int reslen;
+
+ if (retcode != 0) {
+ if (retcode >= 2 && retcode <= 6)
+ printf("[%s] . ", retcodestr[retcode]);
+ else
+ printf("[%d] . ", retcode);
+ } else
+ printf(". ");
+ fflush(stdout);
+ scriptObjPtr = Jim_NewStringObj(interp, "", 0);
+ Jim_IncrRefCount(scriptObjPtr);
+ while(1) {
+ const char *str;
+ char state;
+ int len;
+
+ if ( fgets(buf, 1024, stdin) == NULL) {
+ Jim_DecrRefCount(interp, scriptObjPtr);
+ goto out;
+ }
+ Jim_AppendString(interp, scriptObjPtr, buf, -1);
+ str = Jim_GetString(scriptObjPtr, &len);
+ if (Jim_ScriptIsComplete(str, len, &state))
+ break;
+ printf("%c> ", state);
+ fflush(stdout);
+ }
+ retcode = Jim_EvalObj(interp, scriptObjPtr);
+ Jim_DecrRefCount(interp, scriptObjPtr);
+ result = Jim_GetString(Jim_GetResult(interp), &reslen);
+ if (retcode == JIM_ERR) {
+ Jim_PrintErrorMessage(interp);
+ } else if (retcode == JIM_EXIT) {
+ exit(Jim_GetExitCode(interp));
+ } else {
+ if (reslen) {
+ printf("%s\n", result);
+ }
+ }
+ }
+out:
+ return 0;
+}
+
diff --git a/jim-posix.c b/jim-posix.c
index ba4e156..5125e16 100644
--- a/jim-posix.c
+++ b/jim-posix.c
@@ -203,6 +203,7 @@ static int Jim_PointInTimeJulianCommand(Jim_Interp *interp, int argc,
return JIM_OK;
}
+#if 0
// signal stuff
// signal <signame>
@@ -213,7 +214,11 @@ static int Jim_PointInTimeJulianCommand(Jim_Interp *interp, int argc,
"SIGUSR1", "SIGUSR2",
"SIGCHLD", "SIGCONT", "SIGSTOP",
"SIGTSTP", "SIGTTIN" "SIGTTOU",
- "SIGBUS", "SIGPOLL", "SIGPROF", "SIGSYS",
+ "SIGBUS",
+#ifdef SIGPOLL
+ "SIGPOLL",
+#endif
+ "SIGPROF", "SIGSYS",
"SIGTRAP", "SIGURG", "SIGVTALRM", "SIGXCPU",
"SIGXFSZ",
"SIGIOT",
@@ -240,7 +245,11 @@ static int signums[] = {
SIGUSR1, SIGUSR2,
SIGCHLD, SIGCONT, SIGSTOP,
SIGTSTP, SIGTTIN, SIGTTOU,
- SIGBUS, SIGPOLL, SIGPROF, SIGSYS,
+ SIGBUS,
+#ifdef SIGPOLL
+ SIGPOLL,
+#endif
+ SIGPROF, SIGSYS,
SIGTRAP, SIGURG, SIGVTALRM, SIGXCPU,
SIGXFSZ,
SIGIOT,
@@ -262,6 +271,8 @@ static int signums[] = {
#endif
0
} ;
+
+#if 0
enum {
HUP, INT, QUIT, ILL,
ABRT, FPE, KILL, SEGV,
@@ -291,11 +302,17 @@ enum {
#endif
ISEND
} ;
+#endif
+#endif
+
static void Jim_Posix_SigHandler(int signal)
{
+#if 0
int i;
- for (i=0; ((i<ISEND) && (signums[i] != signal));i++) ;
- fprintf(stderr,"signal %d %s\n", signal,signames[i]);
+ for (i=0; i<sizeof(signums)/sizeof(*signums) && (signums[i] != signal);i++) ;
+#endif
+ //fprintf(stderr,"signal %d %s\n", signal,signames[i]);
+ fprintf(stderr,"signal %d\n", signal);
}
typedef void (*sighandler_t)(int);
@@ -360,9 +377,8 @@ static int Jim_PosixSignalCommand(Jim_Interp *interp, int argc,
// end added
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_PosixInit(Jim_Interp *interp)
{
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "posix", "1.0", JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
Jim_CreateCommand(interp, "os.fork", Jim_PosixForkCommand, NULL, NULL);
diff --git a/jim-readdir.c b/jim-readdir.c
index 8dcd4cf..23f7c95 100644
--- a/jim-readdir.c
+++ b/jim-readdir.c
@@ -111,9 +111,8 @@ Jim_ReaddirCmd (Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return JIM_OK;
}
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_ReaddirInit(Jim_Interp *interp)
{
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "readdir", "1.0", JIM_ERRMSG) != JIM_OK) {
return JIM_ERR;
}
diff --git a/jim-readline.c b/jim-readline.c
index a3238af..8070d01 100644
--- a/jim-readline.c
+++ b/jim-readline.c
@@ -48,9 +48,8 @@ static int JimRlAddHistoryCommand(Jim_Interp *interp, int argc,
return JIM_OK;
}
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_ReadlineInit(Jim_Interp *interp)
{
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "readline", "1.0", JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
Jim_CreateCommand(interp, "readline.readline", JimRlReadlineCommand, NULL,
diff --git a/jim-regexp.c b/jim-regexp.c
index 72d2f1f..32735b7 100644
--- a/jim-regexp.c
+++ b/jim-regexp.c
@@ -470,9 +470,8 @@ int Jim_RegsubCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return result;
}
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_RegexpInit(Jim_Interp *interp)
{
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "regexp", "1.0", JIM_ERRMSG) != JIM_OK) {
return JIM_ERR;
}
diff --git a/jim-sqlite3.c b/jim-sqlite3.c
index 1c12c55..5439e89 100644
--- a/jim-sqlite3.c
+++ b/jim-sqlite3.c
@@ -287,9 +287,8 @@ static int JimSqliteOpenCommand(Jim_Interp *interp, int argc,
}
DLLEXPORT int
-Jim_OnLoad(Jim_Interp *interp)
+Jim_Sqlite3Init(Jim_Interp *interp)
{
- Jim_InitExtension(interp);
if (Jim_PackageProvide(interp, "sqlite3", "1.0", JIM_ERRMSG) != JIM_OK)
return JIM_ERR;
Jim_CreateCommand(interp, "sqlite3.open", JimSqliteOpenCommand, NULL, NULL);
diff --git a/jim.c b/jim.c
index fb20045..54d6e17 100644
--- a/jim.c
+++ b/jim.c
@@ -106,7 +106,6 @@ static char *JimEmptyStringRep = (char*) "";
* ---------------------------------------------------------------------------*/
static void JimChangeCallFrameId(Jim_Interp *interp, Jim_CallFrame *cf);
static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int flags);
-static void JimRegisterCoreApi(Jim_Interp *interp);
static Jim_HashTableType JimVariablesHashTableType;
@@ -538,13 +537,11 @@ void Jim_Panic(Jim_Interp *interp, const char *fmt, ...)
fprintf(fp,"[backtrace] of 'nm <executable>' in the bug report." JIM_NL);
}
#endif
-
- /* This may actually crash... we do it last */
- if( interp && interp->cookie_stderr ){
- Jim_fprintf( interp, interp->cookie_stderr, JIM_NL "JIM INTERPRETER PANIC: ");
- Jim_vfprintf( interp, interp->cookie_stderr, fmt, ap );
- Jim_fprintf( interp, interp->cookie_stderr, JIM_NL JIM_NL );
- }
+
+ fprintf(stderr, JIM_NL "JIM INTERPRETER PANIC: ");
+ vfprintf(stderr, fmt, ap );
+ fprintf(stderr, JIM_NL JIM_NL );
+
abort();
}
@@ -2576,66 +2573,6 @@ int qsortCompareStringPointers(const void *a, const void *b)
return strcmp(*sa, *sb);
}
-int Jim_GetEnum(Jim_Interp *interp, Jim_Obj *objPtr,
- const char * const *tablePtr, int *indexPtr, const char *name, int flags)
-{
- const char * const *entryPtr = NULL;
- char **tablePtrSorted;
- int i, count = 0;
-
- *indexPtr = -1;
- for (entryPtr = tablePtr, i = 0; *entryPtr != NULL; entryPtr++, i++) {
- if (Jim_CompareStringImmediate(interp, objPtr, *entryPtr)) {
- *indexPtr = i;
- return JIM_OK;
- }
- count++; /* If nothing matches, this will reach the len of tablePtr */
- }
- if (flags & JIM_ERRMSG) {
- if (name == NULL)
- name = "option";
- Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
- Jim_AppendStrings(interp, Jim_GetResult(interp),
- "bad ", name, " \"", Jim_GetString(objPtr, NULL), "\": must be one of ",
- NULL);
- tablePtrSorted = Jim_Alloc(sizeof(char*)*count);
- memcpy(tablePtrSorted, tablePtr, sizeof(char*)*count);
- qsort(tablePtrSorted, count, sizeof(char*), qsortCompareStringPointers);
- for (i = 0; i < count; i++) {
- if (i+1 == count && count > 1)
- Jim_AppendString(interp, Jim_GetResult(interp), "or ", -1);
- Jim_AppendString(interp, Jim_GetResult(interp),
- tablePtrSorted[i], -1);
- if (i+1 != count)
- Jim_AppendString(interp, Jim_GetResult(interp), ", ", -1);
- }
- Jim_Free(tablePtrSorted);
- }
- return JIM_ERR;
-}
-
-int Jim_GetNvp(Jim_Interp *interp,
- Jim_Obj *objPtr,
- const Jim_Nvp *nvp_table,
- const Jim_Nvp ** result)
-{
- Jim_Nvp *n;
- int e;
-
- e = Jim_Nvp_name2value_obj( interp, nvp_table, objPtr, &n );
- if( e == JIM_ERR ){
- return e;
- }
-
- /* Success? found? */
- if( n->name ){
- /* remove const */
- *result = (Jim_Nvp *)n;
- return JIM_OK;
- } else {
- return JIM_ERR;
- }
-}
/* -----------------------------------------------------------------------------
* Source Object
@@ -4265,7 +4202,7 @@ int Jim_Collect(Jim_Interp *interp)
Jim_AddHashEntry(&marks,
&objPtr->internalRep.refValue.id, NULL);
#ifdef JIM_DEBUG_GC
- Jim_fprintf(interp,interp->cookie_stdout,
+ printf(
"MARK (reference): %d refcount: %d" JIM_NL,
(int) objPtr->internalRep.refValue.id,
objPtr->refCount);
@@ -4304,7 +4241,7 @@ int Jim_Collect(Jim_Interp *interp)
* was found. Mark it. */
Jim_AddHashEntry(&marks, &id, NULL);
#ifdef JIM_DEBUG_GC
- Jim_fprintf(interp,interp->cookie_stdout,"MARK: %d" JIM_NL, (int)id);
+ printf("MARK: %d" JIM_NL, (int)id);
#endif
p += JIM_REFERENCE_SPACE;
}
@@ -4324,7 +4261,7 @@ int Jim_Collect(Jim_Interp *interp)
* this reference. */
if (Jim_FindHashEntry(&marks, refId) == NULL) {
#ifdef JIM_DEBUG_GC
- Jim_fprintf(interp,interp->cookie_stdout,"COLLECTING %d" JIM_NL, (int)*refId);
+ printf("COLLECTING %d" JIM_NL, (int)*refId);
#endif
collected++;
/* Drop the reference, but call the
@@ -4412,14 +4349,6 @@ Jim_Interp *Jim_CreateInterp(void)
i->freeFramesList = NULL;
i->prngState = NULL;
i->evalRetcodeLevel = -1;
- i->cookie_stdin = stdin;
- i->cookie_stdout = stdout;
- i->cookie_stderr = stderr;
- i->cb_fwrite = ((size_t (*)( const void *, size_t, size_t, void *))(fwrite));
- i->cb_fread = ((size_t (*)( void *, size_t, size_t, void *))(fread));
- i->cb_vfprintf = ((int (*)( void *, const char *fmt, va_list ))(vfprintf));
- i->cb_fflush = ((int (*)( void *))(fflush));
- i->cb_fgets = ((char * (*)( char *, int, void *))(fgets));
/* Note that we can create objects only after the
* interpreter liveList and freeList pointers are
@@ -4447,8 +4376,6 @@ Jim_Interp *Jim_CreateInterp(void)
Jim_SetVariableStr(i, "jim_libpath", pathPtr);
Jim_SetVariableStrWithStr(i, "jim_interactive", "0");
- /* Export the core API to extensions */
- JimRegisterCoreApi(i);
return i;
}
@@ -4489,23 +4416,23 @@ void Jim_FreeInterp(Jim_Interp *i)
if (i->liveList != NULL) {
Jim_Obj *objPtr = i->liveList;
- Jim_fprintf( i, i->cookie_stdout,JIM_NL "-------------------------------------" JIM_NL);
- Jim_fprintf( i, i->cookie_stdout,"Objects still in the free list:" JIM_NL);
+ printf(JIM_NL "-------------------------------------" JIM_NL);
+ printf("Objects still in the free list:" JIM_NL);
while(objPtr) {
const char *type = objPtr->typePtr ?
objPtr->typePtr->name : "";
- Jim_fprintf( i, i->cookie_stdout,"%p \"%-10s\": '%.20s' (refCount: %d)" JIM_NL,
+ printf("%p \"%-10s\": '%.20s' (refCount: %d)" JIM_NL,
objPtr, type,
objPtr->bytes ? objPtr->bytes
: "(null)", objPtr->refCount);
if (objPtr->typePtr == &sourceObjType) {
- Jim_fprintf( i, i->cookie_stdout, "FILE %s LINE %d" JIM_NL,
+ printf( "FILE %s LINE %d" JIM_NL,
objPtr->internalRep.sourceValue.fileName,
objPtr->internalRep.sourceValue.lineNumber);
}
objPtr = objPtr->nextObjPtr;
}
- Jim_fprintf( i, i->cookie_stdout, "-------------------------------------" JIM_NL JIM_NL);
+ printf( "-------------------------------------" JIM_NL JIM_NL);
Jim_Panic(i,"Live list non empty freeing the interpreter! Leak?");
}
/* Free all the freed objects. */
@@ -4696,24 +4623,6 @@ int Jim_GetExitCode(Jim_Interp *interp) {
return interp->exitCode;
}
-void *Jim_SetStdin(Jim_Interp *interp, void *fp)
-{
- if (fp != NULL) interp->cookie_stdin = fp;
- return interp->cookie_stdin;
-}
-
-void *Jim_SetStdout(Jim_Interp *interp, void *fp)
-{
- if (fp != NULL) interp->cookie_stdout = fp;
- return interp->cookie_stdout;
-}
-
-void *Jim_SetStderr(Jim_Interp *interp, void *fp)
-{
- if (fp != NULL) interp->cookie_stderr = fp;
- return interp->cookie_stderr;
-}
-
/* -----------------------------------------------------------------------------
* Shared strings.
* Every interpreter has an hash table where to put shared dynamically
@@ -8924,7 +8833,7 @@ int Jim_EvalObjBackground(Jim_Interp *interp, Jim_Obj *scriptObjPtr)
Jim_IncrRefCount(objv[1]);
if (Jim_EvalObjVector(interp, 2, objv) != JIM_OK) {
/* Report the error to stderr. */
- Jim_fprintf( interp, interp->cookie_stderr, "Background error:" JIM_NL);
+ fprintf(stderr, "Background error:" JIM_NL);
Jim_PrintErrorMessage(interp);
}
Jim_DecrRefCount(interp, objv[0]);
@@ -9203,178 +9112,6 @@ err:
}
/* -----------------------------------------------------------------------------
- * API Input/Export functions
- * ---------------------------------------------------------------------------*/
-
-int Jim_GetApi(Jim_Interp *interp, const char *funcname, void *targetPtrPtr)
-{
- Jim_HashEntry *he;
-
- he = Jim_FindHashEntry(&interp->stub, funcname);
- if (!he)
- return JIM_ERR;
- memcpy(targetPtrPtr, &he->val, sizeof(void*));
- return JIM_OK;
-}
-
-int Jim_RegisterApi(Jim_Interp *interp, const char *funcname, void *funcptr)
-{
- return Jim_AddHashEntry(&interp->stub, funcname, funcptr);
-}
-
-#define JIM_REGISTER_API(name) \
- Jim_RegisterApi(interp, "Jim_" #name, (void *)Jim_ ## name)
-
-void JimRegisterCoreApi(Jim_Interp *interp)
-{
- interp->getApiFuncPtr = Jim_GetApi;
- JIM_REGISTER_API(Alloc);
- JIM_REGISTER_API(Free);
- JIM_REGISTER_API(Eval);
- JIM_REGISTER_API(Eval_Named);
- JIM_REGISTER_API(EvalGlobal);
- JIM_REGISTER_API(EvalFile);
- JIM_REGISTER_API(EvalObj);
- JIM_REGISTER_API(EvalObjBackground);
- JIM_REGISTER_API(EvalObjVector);
- JIM_REGISTER_API(InitHashTable);
- JIM_REGISTER_API(ExpandHashTable);
- JIM_REGISTER_API(AddHashEntry);
- JIM_REGISTER_API(ReplaceHashEntry);
- JIM_REGISTER_API(DeleteHashEntry);
- JIM_REGISTER_API(FreeHashTable);
- JIM_REGISTER_API(FindHashEntry);
- JIM_REGISTER_API(ResizeHashTable);
- JIM_REGISTER_API(GetHashTableIterator);
- JIM_REGISTER_API(NextHashEntry);
- JIM_REGISTER_API(NewObj);
- JIM_REGISTER_API(FreeObj);
- JIM_REGISTER_API(InvalidateStringRep);
- JIM_REGISTER_API(InitStringRep);
- JIM_REGISTER_API(DuplicateObj);
- JIM_REGISTER_API(GetString);
- JIM_REGISTER_API(Length);
- JIM_REGISTER_API(InvalidateStringRep);
- JIM_REGISTER_API(NewStringObj);
- JIM_REGISTER_API(NewStringObjNoAlloc);
- JIM_REGISTER_API(AppendString);
- JIM_REGISTER_API(AppendString_sprintf);
- JIM_REGISTER_API(AppendObj);
- JIM_REGISTER_API(AppendStrings);
- JIM_REGISTER_API(StringEqObj);
- JIM_REGISTER_API(StringMatchObj);
- JIM_REGISTER_API(StringRangeObj);
- JIM_REGISTER_API(FormatString);
- JIM_REGISTER_API(CompareStringImmediate);
- JIM_REGISTER_API(NewReference);
- JIM_REGISTER_API(GetReference);
- JIM_REGISTER_API(SetFinalizer);
- JIM_REGISTER_API(GetFinalizer);
- JIM_REGISTER_API(CreateInterp);
- JIM_REGISTER_API(FreeInterp);
- JIM_REGISTER_API(GetExitCode);
- JIM_REGISTER_API(SetStdin);
- JIM_REGISTER_API(SetStdout);
- JIM_REGISTER_API(SetStderr);
- JIM_REGISTER_API(CreateCommand);
- JIM_REGISTER_API(CreateProcedure);
- JIM_REGISTER_API(DeleteCommand);
- JIM_REGISTER_API(RenameCommand);
- JIM_REGISTER_API(GetCommand);
- JIM_REGISTER_API(SetVariable);
- JIM_REGISTER_API(SetVariableStr);
- JIM_REGISTER_API(SetGlobalVariableStr);
- JIM_REGISTER_API(SetVariableStrWithStr);
- JIM_REGISTER_API(SetVariableLink);
- JIM_REGISTER_API(GetVariable);
- JIM_REGISTER_API(GetCallFrameByLevel);
- JIM_REGISTER_API(Collect);
- JIM_REGISTER_API(CollectIfNeeded);
- JIM_REGISTER_API(GetIndex);
- JIM_REGISTER_API(NewListObj);
- JIM_REGISTER_API(ListAppendElement);
- JIM_REGISTER_API(ListAppendList);
- JIM_REGISTER_API(ListLength);
- JIM_REGISTER_API(ListIndex);
- JIM_REGISTER_API(SetListIndex);
- JIM_REGISTER_API(ConcatObj);
- JIM_REGISTER_API(NewDictObj);
- JIM_REGISTER_API(DictKey);
- JIM_REGISTER_API(DictKeysVector);
- JIM_REGISTER_API(GetIndex);
- JIM_REGISTER_API(GetReturnCode);
- JIM_REGISTER_API(EvalExpression);
- JIM_REGISTER_API(GetBoolFromExpr);
- JIM_REGISTER_API(GetWide);
- JIM_REGISTER_API(GetLong);
- JIM_REGISTER_API(SetWide);
- JIM_REGISTER_API(NewIntObj);
- JIM_REGISTER_API(GetDouble);
- JIM_REGISTER_API(SetDouble);
- JIM_REGISTER_API(NewDoubleObj);
- JIM_REGISTER_API(WrongNumArgs);
- JIM_REGISTER_API(SetDictKeysVector);
- JIM_REGISTER_API(SubstObj);
- JIM_REGISTER_API(RegisterApi);
- JIM_REGISTER_API(PrintErrorMessage);
- JIM_REGISTER_API(InteractivePrompt);
- JIM_REGISTER_API(RegisterCoreCommands);
- JIM_REGISTER_API(GetSharedString);
- JIM_REGISTER_API(ReleaseSharedString);
- JIM_REGISTER_API(Panic);
- JIM_REGISTER_API(StrDup);
- JIM_REGISTER_API(UnsetVariable);
- JIM_REGISTER_API(GetVariableStr);
- JIM_REGISTER_API(GetGlobalVariable);
- JIM_REGISTER_API(GetGlobalVariableStr);
- JIM_REGISTER_API(GetAssocData);
- JIM_REGISTER_API(SetAssocData);
- JIM_REGISTER_API(DeleteAssocData);
- JIM_REGISTER_API(GetEnum);
- JIM_REGISTER_API(ScriptIsComplete);
- JIM_REGISTER_API(PackageRequire);
- JIM_REGISTER_API(PackageProvide);
- JIM_REGISTER_API(InitStack);
- JIM_REGISTER_API(FreeStack);
- JIM_REGISTER_API(StackLen);
- JIM_REGISTER_API(StackPush);
- JIM_REGISTER_API(StackPop);
- JIM_REGISTER_API(StackPeek);
- JIM_REGISTER_API(FreeStackElements);
- JIM_REGISTER_API(fprintf );
- JIM_REGISTER_API(vfprintf );
- JIM_REGISTER_API(fwrite );
- JIM_REGISTER_API(fread );
- JIM_REGISTER_API(fflush );
- JIM_REGISTER_API(fgets );
- JIM_REGISTER_API(GetNvp);
- JIM_REGISTER_API(Nvp_name2value);
- JIM_REGISTER_API(Nvp_name2value_simple);
- JIM_REGISTER_API(Nvp_name2value_obj);
- JIM_REGISTER_API(Nvp_name2value_nocase);
- JIM_REGISTER_API(Nvp_name2value_obj_nocase);
-
- JIM_REGISTER_API(Nvp_value2name);
- JIM_REGISTER_API(Nvp_value2name_simple);
- JIM_REGISTER_API(Nvp_value2name_obj);
-
- JIM_REGISTER_API(GetOpt_Setup);
- JIM_REGISTER_API(GetOpt_Debug);
- JIM_REGISTER_API(GetOpt_Obj);
- JIM_REGISTER_API(GetOpt_String);
- JIM_REGISTER_API(GetOpt_Double);
- JIM_REGISTER_API(GetOpt_Wide);
- JIM_REGISTER_API(GetOpt_Nvp);
- JIM_REGISTER_API(GetOpt_NvpUnknown);
- JIM_REGISTER_API(GetOpt_Enum);
-
- JIM_REGISTER_API(Debug_ArgvString);
- JIM_REGISTER_API(SetResult_sprintf);
- JIM_REGISTER_API(SetResult_NvpUnknown);
-
-}
-
-/* -----------------------------------------------------------------------------
* Core commands utility functions
* ---------------------------------------------------------------------------*/
void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv,
@@ -9503,9 +9240,8 @@ static int Jim_PutsCoreCommand(Jim_Interp *interp, int argc,
argv++;
}
}
- str = Jim_GetString(argv[1], &len);
- Jim_fwrite(interp, str, 1, len, interp->cookie_stdout);
- if (!nonewline) Jim_fprintf( interp, interp->cookie_stdout, JIM_NL);
+ str = Jim_GetString(argv[1], 0);
+ printf("%s%s", str, nonewline ? "" : "\n");
return JIM_OK;
}
@@ -9795,7 +9531,7 @@ static int Jim_WhileCoreCommand(Jim_Interp *interp, int argc,
exprLen = expr->len;
if (exprLen == 1) {
- jim_wide wideValue;
+ jim_wide wideValue = 0;
if (expr->opcode[0] == JIM_EXPROP_VARIABLE) {
varAObjPtr = expr->obj[0];
@@ -9835,7 +9571,7 @@ static int Jim_WhileCoreCommand(Jim_Interp *interp, int argc,
if (varAObjPtr)
Jim_DecrRefCount(interp, varAObjPtr);
} else if (exprLen == 3) {
- jim_wide wideValueA, wideValueB, cmpRes = 0;
+ jim_wide wideValueA, wideValueB = 0, cmpRes = 0;
int cmpType = expr->opcode[2];
varAObjPtr = expr->obj[0];
@@ -9962,7 +9698,7 @@ static int Jim_ForCoreCommand(Jim_Interp *interp, int argc,
{
ScriptObj *initScript, *incrScript;
ExprByteCode *expr;
- jim_wide start, stop, currentVal;
+ jim_wide start, stop = 0, currentVal;
unsigned jim_wide procEpoch = interp->procEpoch;
Jim_Obj *varNamePtr, *stopVarNamePtr = NULL, *objPtr;
int cmpType;
@@ -12095,7 +11831,7 @@ static int Jim_RangeCoreCommand(Jim_Interp *interp, int argc,
static int Jim_RandCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
- jim_wide min = 0, max, len, maxMul;
+ jim_wide min = 0, max = 0, len, maxMul;
if (argc < 1 || argc > 3) {
Jim_WrongNumArgs(interp, 1, argv, "?min? max");
@@ -12280,10 +12016,10 @@ void Jim_PrintErrorMessage(Jim_Interp *interp)
int len, i;
if (*interp->errorFileName) {
- Jim_fprintf(interp, interp->cookie_stderr, "Runtime error, file \"%s\", line %d:" JIM_NL " ",
+ fprintf(stderr, "Runtime error, file \"%s\", line %d:" JIM_NL " ",
interp->errorFileName, interp->errorLine);
}
- Jim_fprintf(interp,interp->cookie_stderr, "%s" JIM_NL,
+ fprintf(stderr, "%s" JIM_NL,
Jim_GetString(interp->result, NULL));
Jim_ListLength(interp, interp->stackTrace, &len);
for (i = len-3; i >= 0; i-= 3) {
@@ -12299,522 +12035,57 @@ void Jim_PrintErrorMessage(Jim_Interp *interp)
JIM_NONE);
line = Jim_GetString(objPtr, NULL);
if (*proc) {
- Jim_fprintf( interp, interp->cookie_stderr,
+ fprintf(stderr,
"in procedure '%s' ", proc);
}
if (*file) {
- Jim_fprintf( interp, interp->cookie_stderr,
+ fprintf(stderr,
"called at file \"%s\", line %s",
file, line);
}
if (*file || *proc) {
- Jim_fprintf( interp, interp->cookie_stderr, JIM_NL);
+ fprintf(stderr, JIM_NL);
}
}
}
-
-int Jim_InteractivePrompt(Jim_Interp *interp)
+int Jim_GetEnum(Jim_Interp *interp, Jim_Obj *objPtr,
+ const char * const *tablePtr, int *indexPtr, const char *name, int flags)
{
- int retcode = JIM_OK;
- Jim_Obj *scriptObjPtr;
-
- Jim_fprintf(interp,interp->cookie_stdout, "Welcome to Jim version %d.%d, "
- "Copyright (c) 2005-8 Salvatore Sanfilippo" JIM_NL,
- JIM_VERSION / 100, JIM_VERSION % 100);
- Jim_SetVariableStrWithStr(interp, "jim_interactive", "1");
- while (1) {
- char buf[1024];
- const char *result;
- const char *retcodestr[] = {
- "ok", "error", "return", "break", "continue", "eval", "exit"
- };
- int reslen;
-
- if (retcode != 0) {
- if (retcode >= 2 && retcode <= 6)
- Jim_fprintf(interp,interp->cookie_stdout, "[%s] . ", retcodestr[retcode]);
- else
- Jim_fprintf(interp,interp->cookie_stdout, "[%d] . ", retcode);
- } else
- Jim_fprintf( interp, interp->cookie_stdout, ". ");
- Jim_fflush( interp, interp->cookie_stdout);
- scriptObjPtr = Jim_NewStringObj(interp, "", 0);
- Jim_IncrRefCount(scriptObjPtr);
- while(1) {
- const char *str;
- char state;
- int len;
+ const char * const *entryPtr = NULL;
+ char **tablePtrSorted;
+ int i, count = 0;
- if ( Jim_fgets(interp, buf, 1024, interp->cookie_stdin) == NULL) {
- Jim_DecrRefCount(interp, scriptObjPtr);
- goto out;
- }
- Jim_AppendString(interp, scriptObjPtr, buf, -1);
- str = Jim_GetString(scriptObjPtr, &len);
- if (Jim_ScriptIsComplete(str, len, &state))
- break;
- Jim_fprintf( interp, interp->cookie_stdout, "%c> ", state);
- Jim_fflush( interp, interp->cookie_stdout);
+ *indexPtr = -1;
+ for (entryPtr = tablePtr, i = 0; *entryPtr != NULL; entryPtr++, i++) {
+ if (Jim_CompareStringImmediate(interp, objPtr, *entryPtr)) {
+ *indexPtr = i;
+ return JIM_OK;
}
- retcode = Jim_EvalObj(interp, scriptObjPtr);
- Jim_DecrRefCount(interp, scriptObjPtr);
- result = Jim_GetString(Jim_GetResult(interp), &reslen);
- if (retcode == JIM_ERR) {
- Jim_PrintErrorMessage(interp);
- } else if (retcode == JIM_EXIT) {
- exit(Jim_GetExitCode(interp));
- } else {
- if (reslen) {
- Jim_fwrite( interp, result, 1, reslen, interp->cookie_stdout);
- Jim_fprintf( interp,interp->cookie_stdout, JIM_NL);
- }
+ count++; /* If nothing matches, this will reach the len of tablePtr */
+ }
+ if (flags & JIM_ERRMSG) {
+ if (name == NULL)
+ name = "option";
+ Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+ Jim_AppendStrings(interp, Jim_GetResult(interp),
+ "bad ", name, " \"", Jim_GetString(objPtr, NULL), "\": must be one of ",
+ NULL);
+ tablePtrSorted = Jim_Alloc(sizeof(char*)*count);
+ memcpy(tablePtrSorted, tablePtr, sizeof(char*)*count);
+ qsort(tablePtrSorted, count, sizeof(char*), qsortCompareStringPointers);
+ for (i = 0; i < count; i++) {
+ if (i+1 == count && count > 1)
+ Jim_AppendString(interp, Jim_GetResult(interp), "or ", -1);
+ Jim_AppendString(interp, Jim_GetResult(interp),
+ tablePtrSorted[i], -1);
+ if (i+1 != count)
+ Jim_AppendString(interp, Jim_GetResult(interp), ", ", -1);
}
+ Jim_Free(tablePtrSorted);
}
-out:
- return 0;
-}
-
-/* -----------------------------------------------------------------------------
- * Jim's idea of STDIO..
- * ---------------------------------------------------------------------------*/
-
-int Jim_fprintf( Jim_Interp *interp, void *cookie, const char *fmt, ... )
-{
- int r;
-
- va_list ap;
- va_start(ap,fmt);
- r = Jim_vfprintf( interp, cookie, fmt,ap );
- va_end(ap);
- return r;
-}
-
-int Jim_vfprintf( Jim_Interp *interp, void *cookie, const char *fmt, va_list ap )
-{
- if( (interp == NULL) || (interp->cb_vfprintf == NULL) ){
- errno = ENOTSUP;
- return -1;
- }
- return (*(interp->cb_vfprintf))( cookie, fmt, ap );
-}
-
-size_t Jim_fwrite( Jim_Interp *interp, const void *ptr, size_t size, size_t n, void *cookie )
-{
- if( (interp == NULL) || (interp->cb_fwrite == NULL) ){
- errno = ENOTSUP;
- return 0;
- }
- return (*(interp->cb_fwrite))( ptr, size, n, cookie);
-}
-
-size_t Jim_fread( Jim_Interp *interp, void *ptr, size_t size, size_t n, void *cookie )
-{
- if( (interp == NULL) || (interp->cb_fread == NULL) ){
- errno = ENOTSUP;
- return 0;
- }
- return (*(interp->cb_fread))( ptr, size, n, cookie);
-}
-
-int Jim_fflush( Jim_Interp *interp, void *cookie )
-{
- if( (interp == NULL) || (interp->cb_fflush == NULL) ){
- /* pretend all is well */
- return 0;
- }
- return (*(interp->cb_fflush))( cookie );
-}
-
-char* Jim_fgets( Jim_Interp *interp, char *s, int size, void *cookie )
-{
- if( (interp == NULL) || (interp->cb_fgets == NULL) ){
- errno = ENOTSUP;
- return NULL;
- }
- return (*(interp->cb_fgets))( s, size, cookie );
-}
-Jim_Nvp *
-Jim_Nvp_name2value_simple( const Jim_Nvp *p, const char *name )
-{
- while( p->name ){
- if( 0 == strcmp( name, p->name ) ){
- break;
- }
- p++;
- }
- return ((Jim_Nvp *)(p));
-}
-
-Jim_Nvp *
-Jim_Nvp_name2value_nocase_simple( const Jim_Nvp *p, const char *name )
-{
- while( p->name ){
- if( 0 == strcasecmp( name, p->name ) ){
- break;
- }
- p++;
- }
- return ((Jim_Nvp *)(p));
-}
-
-int
-Jim_Nvp_name2value_obj( Jim_Interp *interp,
- const Jim_Nvp *p,
- Jim_Obj *o,
- Jim_Nvp **result )
-{
- return Jim_Nvp_name2value( interp, p, Jim_GetString( o, NULL ), result );
-}
-
-
-int
-Jim_Nvp_name2value( Jim_Interp *interp,
- const Jim_Nvp *_p,
- const char *name,
- Jim_Nvp **result)
-{
- const Jim_Nvp *p;
-
- p = Jim_Nvp_name2value_simple( _p, name );
-
- /* result */
- if( result ){
- *result = (Jim_Nvp *)(p);
- }
-
- /* found? */
- if( p->name ){
- return JIM_OK;
- } else {
- return JIM_ERR;
- }
-}
-
-int
-Jim_Nvp_name2value_obj_nocase( Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **puthere )
-{
- return Jim_Nvp_name2value_nocase( interp, p, Jim_GetString( o, NULL ), puthere );
-}
-
-int
-Jim_Nvp_name2value_nocase( Jim_Interp *interp, const Jim_Nvp *_p, const char *name, Jim_Nvp **puthere )
-{
- const Jim_Nvp *p;
-
- p = Jim_Nvp_name2value_nocase_simple( _p, name );
-
- if( puthere ){
- *puthere = (Jim_Nvp *)(p);
- }
- /* found */
- if( p->name ){
- return JIM_OK;
- } else {
- return JIM_ERR;
- }
-}
-
-
-int
-Jim_Nvp_value2name_obj( Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **result )
-{
- int e;;
- jim_wide w;
-
- e = Jim_GetWide( interp, o, &w );
- if( e != JIM_OK ){
- return e;
- }
-
- return Jim_Nvp_value2name( interp, p, w, result );
-}
-
-Jim_Nvp *
-Jim_Nvp_value2name_simple( const Jim_Nvp *p, int value )
-{
- while( p->name ){
- if( value == p->value ){
- break;
- }
- p++;
- }
- return ((Jim_Nvp *)(p));
-}
-
-
-int
-Jim_Nvp_value2name( Jim_Interp *interp, const Jim_Nvp *_p, int value, Jim_Nvp **result )
-{
- const Jim_Nvp *p;
-
- p = Jim_Nvp_value2name_simple( _p, value );
-
- if( result ){
- *result = (Jim_Nvp *)(p);
- }
-
- if( p->name ){
- return JIM_OK;
- } else {
- return JIM_ERR;
- }
-}
-
-
-int
-Jim_GetOpt_Setup( Jim_GetOptInfo *p, Jim_Interp *interp, int argc, Jim_Obj * const * argv)
-{
- memset( p, 0, sizeof(*p) );
- p->interp = interp;
- p->argc = argc;
- p->argv = argv;
-
- return JIM_OK;
-}
-
-void
-Jim_GetOpt_Debug( Jim_GetOptInfo *p )
-{
- int x;
-
- Jim_fprintf( p->interp, p->interp->cookie_stderr, "---args---\n");
- for( x = 0 ; x < p->argc ; x++ ){
- Jim_fprintf( p->interp, p->interp->cookie_stderr,
- "%2d) %s\n",
- x,
- Jim_GetString( p->argv[x], NULL ) );
- }
- Jim_fprintf( p->interp, p->interp->cookie_stderr, "-------\n");
-}
-
-
-int
-Jim_GetOpt_Obj( Jim_GetOptInfo *goi, Jim_Obj **puthere )
-{
- Jim_Obj *o;
-
- o = NULL; // failure
- if( goi->argc ){
- // success
- o = goi->argv[0];
- goi->argc -= 1;
- goi->argv += 1;
- }
- if( puthere ){
- *puthere = o;
- }
- if( o != NULL ){
- return JIM_OK;
- } else {
- return JIM_ERR;
- }
-}
-
-int
-Jim_GetOpt_String( Jim_GetOptInfo *goi, char **puthere, int *len )
-{
- int r;
- Jim_Obj *o;
- const char *cp;
-
-
- r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
- cp = Jim_GetString( o, len );
- if( puthere ){
- /* remove const */
- *puthere = (char *)(cp);
- }
- }
- return r;
-}
-
-int
-Jim_GetOpt_Double( Jim_GetOptInfo *goi, double *puthere )
-{
- int r;
- Jim_Obj *o;
- double _safe;
-
- if( puthere == NULL ){
- puthere = &_safe;
- }
-
- r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
- r = Jim_GetDouble( goi->interp, o, puthere );
- if( r != JIM_OK ){
- Jim_SetResult_sprintf( goi->interp,
- "not a number: %s",
- Jim_GetString( o, NULL ) );
- }
- }
- return r;
-}
-
-int
-Jim_GetOpt_Wide( Jim_GetOptInfo *goi, jim_wide *puthere )
-{
- int r;
- Jim_Obj *o;
- jim_wide _safe;
-
- if( puthere == NULL ){
- puthere = &_safe;
- }
-
- r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
- r = Jim_GetWide( goi->interp, o, puthere );
- }
- return r;
-}
-
-int Jim_GetOpt_Nvp( Jim_GetOptInfo *goi,
- const Jim_Nvp *nvp,
- Jim_Nvp **puthere)
-{
- Jim_Nvp *_safe;
- Jim_Obj *o;
- int e;
-
- if( puthere == NULL ){
- puthere = &_safe;
- }
-
- e = Jim_GetOpt_Obj( goi, &o );
- if( e == JIM_OK ){
- e = Jim_Nvp_name2value_obj( goi->interp,
- nvp,
- o,
- puthere );
- }
-
- return e;
-}
-
-void
-Jim_GetOpt_NvpUnknown( Jim_GetOptInfo *goi,
- const Jim_Nvp *nvptable,
- int hadprefix )
-{
- if( hadprefix ){
- Jim_SetResult_NvpUnknown( goi->interp,
- goi->argv[-2],
- goi->argv[-1],
- nvptable );
- } else {
- Jim_SetResult_NvpUnknown( goi->interp,
- NULL,
- goi->argv[-1],
- nvptable );
- }
-}
-
-
-int
-Jim_GetOpt_Enum( Jim_GetOptInfo *goi,
- const char * const * lookup,
- int *puthere)
-{
- int _safe;
- Jim_Obj *o;
- int e;
-
- if( puthere == NULL ){
- puthere = &_safe;
- }
- e = Jim_GetOpt_Obj( goi, &o );
- if( e == JIM_OK ){
- e = Jim_GetEnum( goi->interp,
- o,
- lookup,
- puthere,
- "option",
- JIM_ERRMSG );
- }
- return e;
-}
-
-
-
-int
-Jim_SetResult_sprintf( Jim_Interp *interp, const char *fmt,... )
-{
- va_list ap;
- char *buf;
-
- va_start(ap,fmt);
- buf = jim_vasprintf( fmt, ap );
- va_end(ap);
- if( buf ){
- Jim_SetResultString( interp, buf, -1 );
- jim_vasprintf_done(buf);
- }
- return JIM_OK;
-}
-
-
-void
-Jim_SetResult_NvpUnknown( Jim_Interp *interp,
- Jim_Obj *param_name,
- Jim_Obj *param_value,
- const Jim_Nvp *nvp )
-{
- if( param_name ){
- Jim_SetResult_sprintf( interp,
- "%s: Unknown: %s, try one of: ",
- Jim_GetString( param_name, NULL ),
- Jim_GetString( param_value, NULL ) );
- } else {
- Jim_SetResult_sprintf( interp,
- "Unknown param: %s, try one of: ",
- Jim_GetString( param_value, NULL ) );
- }
- while( nvp->name ){
- const char *a;
- const char *b;
-
- if( (nvp+1)->name ){
- a = nvp->name;
- b = ", ";
- } else {
- a = "or ";
- b = nvp->name;
- }
- Jim_AppendStrings( interp,
- Jim_GetResult(interp),
- a, b, NULL );
- nvp++;
- }
-}
-
-
-static Jim_Obj *debug_string_obj;
-
-const char *
-Jim_Debug_ArgvString( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
-{
- int x;
-
- if( debug_string_obj ){
- Jim_FreeObj( interp, debug_string_obj );
- }
-
- debug_string_obj = Jim_NewEmptyStringObj( interp );
- for( x = 0 ; x < argc ; x++ ){
- Jim_AppendStrings( interp,
- debug_string_obj,
- Jim_GetString( argv[x], NULL ),
- " ",
- NULL );
- }
-
- return Jim_GetString( debug_string_obj, NULL );
+ return JIM_ERR;
}
-
-
/*
* Local Variables: ***
* c-basic-offset: 4 ***
diff --git a/jim.h b/jim.h
index 7ee8235..4ccf8d2 100644
--- a/jim.h
+++ b/jim.h
@@ -155,7 +155,7 @@ extern "C" {
/* Jim version numbering: every version of jim is marked with a
* successive integer number. This is version 0. The first
* stable version will be 1, then 2, 3, and so on. */
-#define JIM_VERSION 51
+#define JIM_VERSION 60
#define JIM_OK 0
#define JIM_ERR 1
@@ -546,14 +546,16 @@ typedef struct Jim_Interp {
struct Jim_HashTable assocData; /* per-interp storage for use by packages */
Jim_PrngState *prngState; /* per interpreter Random Number Gen. state. */
struct Jim_HashTable packages; /* Provided packages hash table */
+#if 0
void *cookie_stdin; /* input file pointer, 'stdin' by default */
void *cookie_stdout; /* output file pointer, 'stdout' by default */
void *cookie_stderr; /* errors file pointer, 'stderr' by default */
+ int (*cb_vfprintf)( void *cookie, const char *fmt, va_list ap);
size_t (*cb_fwrite )( const void *ptr, size_t size, size_t n, void *cookie );
size_t (*cb_fread )( void *ptr, size_t size, size_t n, void *cookie );
- int (*cb_vfprintf)( void *cookie, const char *fmt, va_list ap );
int (*cb_fflush )( void *cookie );
char *(*cb_fgets )( char *s, int size, void *cookie );
+#endif
} Jim_Interp;
/* Currently provided as macro that performs the increment.
@@ -585,47 +587,6 @@ typedef struct Jim_Reference {
char tag[JIM_REFERENCE_TAGLEN+1];
} Jim_Reference;
-/** Name Value Pairs, aka: NVP
- * - Given a string - return the associated int.
- * - Given a number - return the associated string.
- * .
- *
- * Very useful when the number is not a simple index into an array of
- * known string, or there may be multiple strings (aliases) that mean then same
- * thing.
- *
- * An NVP Table is terminated with ".name=NULL".
- *
- * During the 'name2value' operation, if no matching string is found
- * the pointer to the terminal element (with p->name==NULL) is returned.
- *
- * Example:
- * \code
- * const Jim_Nvp yn[] = {
- * { "yes", 1 },
- * { "no" , 0 },
- * { "yep", 1 },
- * { "nope", 0 },
- * { NULL, -1 },
- * };
- *
- * Jim_Nvp *result
- * e = Jim_Nvp_name2value( interp, yn, "y", &result );
- * returns &yn[0];
- * e = Jim_Nvp_name2value( interp, yn, "n", &result );
- * returns &yn[1];
- * e = Jim_Nvp_name2value( interp, yn, "Blah", &result );
- * returns &yn[4];
- * \endcode
- *
- * During the number2name operation, the first matching value is returned.
- */
-typedef struct {
- const char *name;
- int value;
-} Jim_Nvp;
-
-
/* -----------------------------------------------------------------------------
* Exported API prototypes.
* ---------------------------------------------------------------------------*/
@@ -646,694 +607,267 @@ typedef struct {
/* Macros are common for core and extensions */
#define Jim_FreeHashTableIterator(iter) Jim_Free(iter)
-#ifdef DOXYGEN
-#define JIM_STATIC
-#define JIM_API( X ) X
-#else
-#ifndef __JIM_CORE__
-# 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
-# if defined(BUILD_Jim)
-# define JIM_STATIC DLLEXPORT
-# else
-# define JIM_STATIC static
-# endif
-#endif /* __JIM_CORE__ */
-#endif /* DOXYGEN */
-
-/** Set the result - printf() style */
-JIM_STATIC int JIM_API( Jim_SetResult_sprintf )( Jim_Interp *p, const char *fmt, ... );
+#define JIM_EXPORT
+#define JIM_API(X) X
/* Memory allocation */
-JIM_STATIC void * JIM_API(Jim_Alloc) (int size);
-JIM_STATIC void JIM_API(Jim_Free) (void *ptr);
-JIM_STATIC char * JIM_API(Jim_StrDup) (const char *s);
+JIM_EXPORT void * JIM_API(Jim_Alloc) (int size);
+JIM_EXPORT void JIM_API(Jim_Free) (void *ptr);
+JIM_EXPORT char * JIM_API(Jim_StrDup) (const char *s);
/* evaluation */
-JIM_STATIC int JIM_API(Jim_Eval)(Jim_Interp *interp, const char *script);
+JIM_EXPORT int JIM_API(Jim_Eval)(Jim_Interp *interp, const char *script);
/* in C code, you can do this and get better error messages */
/* Jim_Eval_Named( interp, "some tcl commands", __FILE__, __LINE__ ); */
-JIM_STATIC int JIM_API(Jim_Eval_Named)(Jim_Interp *interp, const char *script,const char *filename, int lineno);
-JIM_STATIC int JIM_API(Jim_EvalGlobal)(Jim_Interp *interp, const char *script);
-JIM_STATIC int JIM_API(Jim_EvalFile)(Jim_Interp *interp, const char *filename);
-JIM_STATIC int JIM_API(Jim_EvalObj) (Jim_Interp *interp, Jim_Obj *scriptObjPtr);
-JIM_STATIC int JIM_API(Jim_EvalObjBackground) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_Eval_Named)(Jim_Interp *interp, const char *script,const char *filename, int lineno);
+JIM_EXPORT int JIM_API(Jim_EvalGlobal)(Jim_Interp *interp, const char *script);
+JIM_EXPORT int JIM_API(Jim_EvalFile)(Jim_Interp *interp, const char *filename);
+JIM_EXPORT int JIM_API(Jim_EvalObj) (Jim_Interp *interp, Jim_Obj *scriptObjPtr);
+JIM_EXPORT int JIM_API(Jim_EvalObjBackground) (Jim_Interp *interp,
Jim_Obj *scriptObjPtr);
-JIM_STATIC int JIM_API(Jim_EvalObjVector) (Jim_Interp *interp, int objc,
+JIM_EXPORT int JIM_API(Jim_EvalObjVector) (Jim_Interp *interp, int objc,
Jim_Obj *const *objv);
-JIM_STATIC int JIM_API(Jim_SubstObj) (Jim_Interp *interp, Jim_Obj *substObjPtr,
+JIM_EXPORT int JIM_API(Jim_SubstObj) (Jim_Interp *interp, Jim_Obj *substObjPtr,
Jim_Obj **resObjPtrPtr, int flags);
/* stack */
-JIM_STATIC void JIM_API(Jim_InitStack)(Jim_Stack *stack);
-JIM_STATIC void JIM_API(Jim_FreeStack)(Jim_Stack *stack);
-JIM_STATIC int JIM_API(Jim_StackLen)(Jim_Stack *stack);
-JIM_STATIC void JIM_API(Jim_StackPush)(Jim_Stack *stack, void *element);
-JIM_STATIC void * JIM_API(Jim_StackPop)(Jim_Stack *stack);
-JIM_STATIC void * JIM_API(Jim_StackPeek)(Jim_Stack *stack);
-JIM_STATIC void JIM_API(Jim_FreeStackElements)(Jim_Stack *stack, void (*freeFunc)(void *ptr));
+JIM_EXPORT void JIM_API(Jim_InitStack)(Jim_Stack *stack);
+JIM_EXPORT void JIM_API(Jim_FreeStack)(Jim_Stack *stack);
+JIM_EXPORT int JIM_API(Jim_StackLen)(Jim_Stack *stack);
+JIM_EXPORT void JIM_API(Jim_StackPush)(Jim_Stack *stack, void *element);
+JIM_EXPORT void * JIM_API(Jim_StackPop)(Jim_Stack *stack);
+JIM_EXPORT void * JIM_API(Jim_StackPeek)(Jim_Stack *stack);
+JIM_EXPORT void JIM_API(Jim_FreeStackElements)(Jim_Stack *stack, void (*freeFunc)(void *ptr));
/* hash table */
-JIM_STATIC int JIM_API(Jim_InitHashTable) (Jim_HashTable *ht,
+JIM_EXPORT int JIM_API(Jim_InitHashTable) (Jim_HashTable *ht,
Jim_HashTableType *type, void *privdata);
-JIM_STATIC int JIM_API(Jim_ExpandHashTable) (Jim_HashTable *ht,
+JIM_EXPORT int JIM_API(Jim_ExpandHashTable) (Jim_HashTable *ht,
unsigned int size);
-JIM_STATIC int JIM_API(Jim_AddHashEntry) (Jim_HashTable *ht, const void *key,
+JIM_EXPORT int JIM_API(Jim_AddHashEntry) (Jim_HashTable *ht, const void *key,
void *val);
-JIM_STATIC int JIM_API(Jim_ReplaceHashEntry) (Jim_HashTable *ht,
+JIM_EXPORT int JIM_API(Jim_ReplaceHashEntry) (Jim_HashTable *ht,
const void *key, void *val);
-JIM_STATIC int JIM_API(Jim_DeleteHashEntry) (Jim_HashTable *ht,
+JIM_EXPORT int JIM_API(Jim_DeleteHashEntry) (Jim_HashTable *ht,
const void *key);
-JIM_STATIC int JIM_API(Jim_FreeHashTable) (Jim_HashTable *ht);
-JIM_STATIC Jim_HashEntry * JIM_API(Jim_FindHashEntry) (Jim_HashTable *ht,
+JIM_EXPORT int JIM_API(Jim_FreeHashTable) (Jim_HashTable *ht);
+JIM_EXPORT Jim_HashEntry * JIM_API(Jim_FindHashEntry) (Jim_HashTable *ht,
const void *key);
-JIM_STATIC int JIM_API(Jim_ResizeHashTable) (Jim_HashTable *ht);
-JIM_STATIC Jim_HashTableIterator *JIM_API(Jim_GetHashTableIterator)
+JIM_EXPORT int JIM_API(Jim_ResizeHashTable) (Jim_HashTable *ht);
+JIM_EXPORT Jim_HashTableIterator *JIM_API(Jim_GetHashTableIterator)
(Jim_HashTable *ht);
-JIM_STATIC Jim_HashEntry * JIM_API(Jim_NextHashEntry)
+JIM_EXPORT Jim_HashEntry * JIM_API(Jim_NextHashEntry)
(Jim_HashTableIterator *iter);
/* objects */
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewObj) (Jim_Interp *interp);
-JIM_STATIC void JIM_API(Jim_FreeObj) (Jim_Interp *interp, Jim_Obj *objPtr);
-JIM_STATIC void JIM_API(Jim_InvalidateStringRep) (Jim_Obj *objPtr);
-JIM_STATIC void JIM_API(Jim_InitStringRep) (Jim_Obj *objPtr, const char *bytes,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewObj) (Jim_Interp *interp);
+JIM_EXPORT void JIM_API(Jim_FreeObj) (Jim_Interp *interp, Jim_Obj *objPtr);
+JIM_EXPORT void JIM_API(Jim_InvalidateStringRep) (Jim_Obj *objPtr);
+JIM_EXPORT void JIM_API(Jim_InitStringRep) (Jim_Obj *objPtr, const char *bytes,
int length);
-JIM_STATIC Jim_Obj * JIM_API(Jim_DuplicateObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_DuplicateObj) (Jim_Interp *interp,
Jim_Obj *objPtr);
-JIM_STATIC const char * JIM_API(Jim_GetString)(Jim_Obj *objPtr,
+JIM_EXPORT const char * JIM_API(Jim_GetString)(Jim_Obj *objPtr,
int *lenPtr);
-JIM_STATIC int JIM_API(Jim_Length)(Jim_Obj *objPtr);
+JIM_EXPORT int JIM_API(Jim_Length)(Jim_Obj *objPtr);
/* string object */
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewStringObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewStringObj) (Jim_Interp *interp,
const char *s, int len);
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewStringObjNoAlloc) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewStringObjNoAlloc) (Jim_Interp *interp,
char *s, int len);
-JIM_STATIC void JIM_API(Jim_AppendString) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT void JIM_API(Jim_AppendString) (Jim_Interp *interp, Jim_Obj *objPtr,
const char *str, int len);
-JIM_STATIC void JIM_API(Jim_AppendString_sprintf) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT void JIM_API(Jim_AppendString_sprintf) (Jim_Interp *interp, Jim_Obj *objPtr,
const char *fmt, ... );
-JIM_STATIC void JIM_API(Jim_AppendObj) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT void JIM_API(Jim_AppendObj) (Jim_Interp *interp, Jim_Obj *objPtr,
Jim_Obj *appendObjPtr);
-JIM_STATIC void JIM_API(Jim_AppendStrings) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_AppendStrings) (Jim_Interp *interp,
Jim_Obj *objPtr, ...);
-JIM_STATIC int JIM_API(Jim_StringEqObj) (Jim_Obj *aObjPtr,
+JIM_EXPORT int JIM_API(Jim_StringEqObj) (Jim_Obj *aObjPtr,
Jim_Obj *bObjPtr, int nocase);
-JIM_STATIC int JIM_API(Jim_StringMatchObj) (Jim_Obj *patternObjPtr,
+JIM_EXPORT int JIM_API(Jim_StringMatchObj) (Jim_Obj *patternObjPtr,
Jim_Obj *objPtr, int nocase);
-JIM_STATIC Jim_Obj * JIM_API(Jim_StringRangeObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_StringRangeObj) (Jim_Interp *interp,
Jim_Obj *strObjPtr, Jim_Obj *firstObjPtr,
Jim_Obj *lastObjPtr);
-JIM_STATIC Jim_Obj * JIM_API(Jim_FormatString) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_FormatString) (Jim_Interp *interp,
Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv);
-JIM_STATIC Jim_Obj * JIM_API(Jim_ScanString) (Jim_Interp *interp, Jim_Obj *strObjPtr,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_ScanString) (Jim_Interp *interp, Jim_Obj *strObjPtr,
Jim_Obj *fmtObjPtr, int flags);
-JIM_STATIC int JIM_API(Jim_CompareStringImmediate) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_CompareStringImmediate) (Jim_Interp *interp,
Jim_Obj *objPtr, const char *str);
/* reference object */
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewReference) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewReference) (Jim_Interp *interp,
Jim_Obj *objPtr, Jim_Obj *tagPtr, Jim_Obj *cmdNamePtr);
-JIM_STATIC Jim_Reference * JIM_API(Jim_GetReference) (Jim_Interp *interp,
+JIM_EXPORT Jim_Reference * JIM_API(Jim_GetReference) (Jim_Interp *interp,
Jim_Obj *objPtr);
-JIM_STATIC int JIM_API(Jim_SetFinalizer) (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *cmdNamePtr);
-JIM_STATIC int JIM_API(Jim_GetFinalizer) (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj **cmdNamePtrPtr);
+JIM_EXPORT int JIM_API(Jim_SetFinalizer) (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *cmdNamePtr);
+JIM_EXPORT int JIM_API(Jim_GetFinalizer) (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj **cmdNamePtrPtr);
/* interpreter */
-JIM_STATIC Jim_Interp * JIM_API(Jim_CreateInterp) (void);
-JIM_STATIC void JIM_API(Jim_FreeInterp) (Jim_Interp *i);
-JIM_STATIC int JIM_API(Jim_GetExitCode) (Jim_Interp *interp);
-JIM_STATIC void * JIM_API(Jim_SetStdin) (Jim_Interp *interp, void *fp);
-JIM_STATIC void * JIM_API(Jim_SetStdout) (Jim_Interp *interp, void *fp);
-JIM_STATIC void * JIM_API(Jim_SetStderr) (Jim_Interp *interp, void *fp);
+JIM_EXPORT Jim_Interp * JIM_API(Jim_CreateInterp) (void);
+JIM_EXPORT void JIM_API(Jim_FreeInterp) (Jim_Interp *i);
+JIM_EXPORT int JIM_API(Jim_GetExitCode) (Jim_Interp *interp);
+JIM_EXPORT void * JIM_API(Jim_SetStdin) (Jim_Interp *interp, void *fp);
+JIM_EXPORT void * JIM_API(Jim_SetStdout) (Jim_Interp *interp, void *fp);
+JIM_EXPORT void * JIM_API(Jim_SetStderr) (Jim_Interp *interp, void *fp);
/* commands */
-JIM_STATIC void JIM_API(Jim_RegisterCoreCommands) (Jim_Interp *interp);
-JIM_STATIC int JIM_API(Jim_CreateCommand) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_RegisterCoreCommands) (Jim_Interp *interp);
+JIM_EXPORT int JIM_API(Jim_CreateCommand) (Jim_Interp *interp,
const char *cmdName, Jim_CmdProc cmdProc, void *privData,
Jim_DelCmdProc delProc);
-JIM_STATIC int JIM_API(Jim_CreateProcedure) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_CreateProcedure) (Jim_Interp *interp,
const char *cmdName, Jim_Obj *argListObjPtr, Jim_Obj *staticsListObjPtr,
Jim_Obj *bodyObjPtr, int arityMin, int arityMax);
-JIM_STATIC int JIM_API(Jim_DeleteCommand) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_DeleteCommand) (Jim_Interp *interp,
const char *cmdName);
-JIM_STATIC int JIM_API(Jim_RenameCommand) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_RenameCommand) (Jim_Interp *interp,
const char *oldName, const char *newName);
-JIM_STATIC Jim_Cmd * JIM_API(Jim_GetCommand) (Jim_Interp *interp,
+JIM_EXPORT Jim_Cmd * JIM_API(Jim_GetCommand) (Jim_Interp *interp,
Jim_Obj *objPtr, int flags);
-JIM_STATIC int JIM_API(Jim_SetVariable) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetVariable) (Jim_Interp *interp,
Jim_Obj *nameObjPtr, Jim_Obj *valObjPtr);
-JIM_STATIC int JIM_API(Jim_SetVariableStr) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetVariableStr) (Jim_Interp *interp,
const char *name, Jim_Obj *objPtr);
-JIM_STATIC int JIM_API(Jim_SetGlobalVariableStr) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetGlobalVariableStr) (Jim_Interp *interp,
const char *name, Jim_Obj *objPtr);
-JIM_STATIC int JIM_API(Jim_SetVariableStrWithStr) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetVariableStrWithStr) (Jim_Interp *interp,
const char *name, const char *val);
-JIM_STATIC int JIM_API(Jim_SetVariableLink) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetVariableLink) (Jim_Interp *interp,
Jim_Obj *nameObjPtr, Jim_Obj *targetNameObjPtr,
Jim_CallFrame *targetCallFrame);
-JIM_STATIC Jim_Obj * JIM_API(Jim_GetVariable) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_GetVariable) (Jim_Interp *interp,
Jim_Obj *nameObjPtr, int flags);
-JIM_STATIC Jim_Obj * JIM_API(Jim_GetGlobalVariable) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_GetGlobalVariable) (Jim_Interp *interp,
Jim_Obj *nameObjPtr, int flags);
-JIM_STATIC Jim_Obj * JIM_API(Jim_GetVariableStr) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_GetVariableStr) (Jim_Interp *interp,
const char *name, int flags);
-JIM_STATIC Jim_Obj * JIM_API(Jim_GetGlobalVariableStr) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_GetGlobalVariableStr) (Jim_Interp *interp,
const char *name, int flags);
-JIM_STATIC int JIM_API(Jim_UnsetVariable) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_UnsetVariable) (Jim_Interp *interp,
Jim_Obj *nameObjPtr, int flags);
/* call frame */
-JIM_STATIC int JIM_API(Jim_GetCallFrameByLevel) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_GetCallFrameByLevel) (Jim_Interp *interp,
Jim_Obj *levelObjPtr, Jim_CallFrame **framePtrPtr,
int *newLevelPtr);
/* garbage collection */
-JIM_STATIC int JIM_API(Jim_Collect) (Jim_Interp *interp);
-JIM_STATIC void JIM_API(Jim_CollectIfNeeded) (Jim_Interp *interp);
+JIM_EXPORT int JIM_API(Jim_Collect) (Jim_Interp *interp);
+JIM_EXPORT void JIM_API(Jim_CollectIfNeeded) (Jim_Interp *interp);
/* index object */
-JIM_STATIC int JIM_API(Jim_GetIndex) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetIndex) (Jim_Interp *interp, Jim_Obj *objPtr,
int *indexPtr);
/* list object */
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewListObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewListObj) (Jim_Interp *interp,
Jim_Obj *const *elements, int len);
-JIM_STATIC void JIM_API(Jim_ListInsertElements) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_ListInsertElements) (Jim_Interp *interp,
Jim_Obj *listPtr, int index, int objc, Jim_Obj *const *objVec);
-JIM_STATIC void JIM_API(Jim_ListAppendElement) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_ListAppendElement) (Jim_Interp *interp,
Jim_Obj *listPtr, Jim_Obj *objPtr);
-JIM_STATIC void JIM_API(Jim_ListAppendList) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_ListAppendList) (Jim_Interp *interp,
Jim_Obj *listPtr, Jim_Obj *appendListPtr);
-JIM_STATIC void JIM_API(Jim_ListLength) (Jim_Interp *interp, Jim_Obj *listPtr,
+JIM_EXPORT void JIM_API(Jim_ListLength) (Jim_Interp *interp, Jim_Obj *listPtr,
int *intPtr);
-JIM_STATIC int JIM_API(Jim_ListIndex) (Jim_Interp *interp, Jim_Obj *listPrt,
+JIM_EXPORT int JIM_API(Jim_ListIndex) (Jim_Interp *interp, Jim_Obj *listPrt,
int index, Jim_Obj **objPtrPtr, int seterr);
-JIM_STATIC int JIM_API(Jim_SetListIndex) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetListIndex) (Jim_Interp *interp,
Jim_Obj *varNamePtr, Jim_Obj *const *indexv, int indexc,
Jim_Obj *newObjPtr);
-JIM_STATIC Jim_Obj * JIM_API(Jim_ConcatObj) (Jim_Interp *interp, int objc,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_ConcatObj) (Jim_Interp *interp, int objc,
Jim_Obj *const *objv);
/* dict object */
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewDictObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewDictObj) (Jim_Interp *interp,
Jim_Obj *const *elements, int len);
-JIM_STATIC int JIM_API(Jim_DictKey) (Jim_Interp *interp, Jim_Obj *dictPtr,
+JIM_EXPORT int JIM_API(Jim_DictKey) (Jim_Interp *interp, Jim_Obj *dictPtr,
Jim_Obj *keyPtr, Jim_Obj **objPtrPtr, int flags);
-JIM_STATIC int JIM_API(Jim_DictKeysVector) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_DictKeysVector) (Jim_Interp *interp,
Jim_Obj *dictPtr, Jim_Obj *const *keyv, int keyc,
Jim_Obj **objPtrPtr, int flags);
-JIM_STATIC int JIM_API(Jim_SetDictKeysVector) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_SetDictKeysVector) (Jim_Interp *interp,
Jim_Obj *varNamePtr, Jim_Obj *const *keyv, int keyc,
Jim_Obj *newObjPtr);
/* return code object */
-JIM_STATIC int JIM_API(Jim_GetReturnCode) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetReturnCode) (Jim_Interp *interp, Jim_Obj *objPtr,
int *intPtr);
/* expression object */
-JIM_STATIC int JIM_API(Jim_EvalExpression) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_EvalExpression) (Jim_Interp *interp,
Jim_Obj *exprObjPtr, Jim_Obj **exprResultPtrPtr);
-JIM_STATIC int JIM_API(Jim_GetBoolFromExpr) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_GetBoolFromExpr) (Jim_Interp *interp,
Jim_Obj *exprObjPtr, int *boolPtr);
/* integer object */
-JIM_STATIC int JIM_API(Jim_GetWide) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetWide) (Jim_Interp *interp, Jim_Obj *objPtr,
jim_wide *widePtr);
-JIM_STATIC int JIM_API(Jim_GetLong) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetLong) (Jim_Interp *interp, Jim_Obj *objPtr,
long *longPtr);
-JIM_STATIC void JIM_API(Jim_SetWide) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT void JIM_API(Jim_SetWide) (Jim_Interp *interp, Jim_Obj *objPtr,
jim_wide wideValue);
#define Jim_NewWideObj Jim_NewIntObj
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewIntObj) (Jim_Interp *interp,
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewIntObj) (Jim_Interp *interp,
jim_wide wideValue);
/* double object */
-JIM_STATIC int JIM_API(Jim_GetDouble)(Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetDouble)(Jim_Interp *interp, Jim_Obj *objPtr,
double *doublePtr);
-JIM_STATIC void JIM_API(Jim_SetDouble)(Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT void JIM_API(Jim_SetDouble)(Jim_Interp *interp, Jim_Obj *objPtr,
double doubleValue);
-JIM_STATIC Jim_Obj * JIM_API(Jim_NewDoubleObj)(Jim_Interp *interp, double doubleValue);
+JIM_EXPORT Jim_Obj * JIM_API(Jim_NewDoubleObj)(Jim_Interp *interp, double doubleValue);
/* shared strings */
-JIM_STATIC const char * JIM_API(Jim_GetSharedString) (Jim_Interp *interp,
+JIM_EXPORT const char * JIM_API(Jim_GetSharedString) (Jim_Interp *interp,
const char *str);
-JIM_STATIC void JIM_API(Jim_ReleaseSharedString) (Jim_Interp *interp,
+JIM_EXPORT void JIM_API(Jim_ReleaseSharedString) (Jim_Interp *interp,
const char *str);
/* commands utilities */
-JIM_STATIC void JIM_API(Jim_WrongNumArgs) (Jim_Interp *interp, int argc,
+JIM_EXPORT void JIM_API(Jim_WrongNumArgs) (Jim_Interp *interp, int argc,
Jim_Obj *const *argv, const char *msg);
-JIM_STATIC int JIM_API(Jim_GetEnum) (Jim_Interp *interp, Jim_Obj *objPtr,
+JIM_EXPORT int JIM_API(Jim_GetEnum) (Jim_Interp *interp, Jim_Obj *objPtr,
const char * const *tablePtr, int *indexPtr, const char *name, int flags);
-JIM_STATIC int JIM_API(Jim_GetNvp) (Jim_Interp *interp,
- Jim_Obj *objPtr,
- const Jim_Nvp *nvp_table,
- const Jim_Nvp **result);
-JIM_STATIC int JIM_API(Jim_ScriptIsComplete) (const char *s, int len,
+JIM_EXPORT int JIM_API(Jim_ScriptIsComplete) (const char *s, int len,
char *stateCharPtr);
/* package utilities */
typedef void (Jim_InterpDeleteProc)(Jim_Interp *interp, void *data);
-JIM_STATIC void * JIM_API(Jim_GetAssocData)(Jim_Interp *interp, const char *key);
-JIM_STATIC int JIM_API(Jim_SetAssocData)(Jim_Interp *interp, const char *key,
+JIM_EXPORT void * JIM_API(Jim_GetAssocData)(Jim_Interp *interp, const char *key);
+JIM_EXPORT int JIM_API(Jim_SetAssocData)(Jim_Interp *interp, const char *key,
Jim_InterpDeleteProc *delProc, void *data);
-JIM_STATIC int JIM_API(Jim_DeleteAssocData)(Jim_Interp *interp, const char *key);
-
-/* API import/export functions */
-JIM_STATIC int JIM_API(Jim_GetApi) (Jim_Interp *interp, const char *funcname,
- void *targetPtrPtr);
-JIM_STATIC int JIM_API(Jim_RegisterApi) (Jim_Interp *interp,
- const char *funcname, void *funcptr);
+JIM_EXPORT int JIM_API(Jim_DeleteAssocData)(Jim_Interp *interp, const char *key);
/* Packages C API */
-JIM_STATIC int JIM_API(Jim_PackageProvide) (Jim_Interp *interp,
+JIM_EXPORT int JIM_API(Jim_PackageProvide) (Jim_Interp *interp,
const char *name, const char *ver, int flags);
-JIM_STATIC const char * JIM_API(Jim_PackageRequire) (Jim_Interp *interp,
+JIM_EXPORT const char * JIM_API(Jim_PackageRequire) (Jim_Interp *interp,
const char *name, const char *ver, int flags);
/* error messages */
-JIM_STATIC void JIM_API(Jim_PrintErrorMessage) (Jim_Interp *interp);
+JIM_EXPORT void JIM_API(Jim_PrintErrorMessage) (Jim_Interp *interp);
/* interactive mode */
-JIM_STATIC int JIM_API(Jim_InteractivePrompt) (Jim_Interp *interp);
+JIM_EXPORT int JIM_API(Jim_InteractivePrompt) (Jim_Interp *interp);
/* Misc */
-JIM_STATIC void JIM_API(Jim_Panic) (Jim_Interp *interp, const char *fmt, ...);
+JIM_EXPORT void JIM_API(Jim_Panic) (Jim_Interp *interp, const char *fmt, ...);
/* Jim's STDIO */
-JIM_STATIC int JIM_API( Jim_fprintf )( Jim_Interp *interp, void *cookie, const char *fmt, ... );
-JIM_STATIC int JIM_API( Jim_vfprintf )( Jim_Interp *interp, void *cookie, const char *fmt, va_list ap );
-JIM_STATIC size_t JIM_API( Jim_fwrite )( Jim_Interp *interp, const void *ptr, size_t size, size_t nmeb, void *cookie );
-JIM_STATIC size_t JIM_API( Jim_fread )( Jim_Interp *interp, void *ptr, size_t size, size_t nmeb, void *cookie );
-JIM_STATIC int JIM_API( Jim_fflush )( Jim_Interp *interp, void *cookie );
-JIM_STATIC char * JIM_API( Jim_fgets )( Jim_Interp *interp, char *s, int size, void *cookie );
-
-/* Name Value Pairs Operations */
-JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_simple)( const Jim_Nvp *nvp_table, const char *name );
-JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_nocase_simple)( const Jim_Nvp *nvp_table, const char *name );
-JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_value2name_simple)( const Jim_Nvp *nvp_table, int v );
-
-JIM_STATIC int JIM_API(Jim_Nvp_name2value)( Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result );
-JIM_STATIC int JIM_API(Jim_Nvp_name2value_nocase)( Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result);
-JIM_STATIC int JIM_API(Jim_Nvp_value2name)( Jim_Interp *interp, const Jim_Nvp *nvp_table, int value, Jim_Nvp **result );
-
-JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj)( Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result );
-JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj_nocase)( Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result );
-JIM_STATIC int JIM_API(Jim_Nvp_value2name_obj)( Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *value_obj, Jim_Nvp **result );
-
-/** prints a nice 'unknown' parameter error message to the 'result' */
-JIM_STATIC void JIM_API(Jim_SetResult_NvpUnknown)( Jim_Interp *interp,
- Jim_Obj *param_name,
- Jim_Obj *param_value,
- const Jim_Nvp *nvp_table );
-
-
-/** Debug: convert argc/argv into a printable string for printf() debug
- *
- * \param interp - the interpeter
- * \param argc - arg count
- * \param argv - the objects
- *
- * \returns string pointer holding the text.
- *
- * Note, next call to this function will free the old (last) string.
- *
- * For example might want do this:
- * \code
- * fp = fopen("some.file.log", "a" );
- * fprintf( fp, "PARAMS are: %s\n", Jim_DebugArgvString( interp, argc, argv ) );
- * fclose(fp);
- * \endcode
- */
-JIM_STATIC const char *JIM_API( Jim_Debug_ArgvString )( Jim_Interp *interp, int argc, Jim_Obj *const *argv );
-
-
-/** A TCL -ish GetOpt like code.
- *
- * Some TCL objects have various "configuration" values.
- * For example - in Tcl/Tk the "buttons" have many options.
- *
- * Usefull when dealing with command options.
- * that may come in any order...
- *
- * Does not support "-foo=123" type options.
- * Only supports tcl type options, like "-foo 123"
- */
-
-typedef struct jim_getopt {
- Jim_Interp *interp;
- int argc;
- Jim_Obj * const * argv;
- int isconfigure; /* non-zero if configure */
-} Jim_GetOptInfo;
-
-/** GetOpt - how to.
- *
- * Example (short and incomplete):
- * \code
- * Jim_GetOptInfo goi;
- *
- * Jim_GetOpt_Setup( &goi, interp, argc, argv );
- *
- * while( goi.argc ){
- * e = Jim_GetOpt_Nvp( &goi, nvp_options, &n );
- * if( e != JIM_OK ){
- * Jim_GetOpt_NvpUnknown( &goi, nvp_options, 0 );
- * return e;
- * }
- *
- * switch( n->value ){
- * case ALIVE:
- * printf("Option ALIVE specified\n");
- * break;
- * case FIRST:
- * if( goi.argc < 1 ){
- * .. not enough args error ..
- * }
- * Jim_GetOpt_String( &goi, &cp, NULL );
- * printf("FIRSTNAME: %s\n", cp );
- * case AGE:
- * Jim_GetOpt_Wide( &goi, &w );
- * printf("AGE: %d\n", (int)(w) );
- * break;
- * case POLITICS:
- * e = Jim_GetOpt_Nvp( &goi, nvp_politics, &n );
- * if( e != JIM_OK ){
- * Jim_GetOpt_NvpUnknown( &goi, nvp_politics, 1 );
- * return e;
- * }
- * }
- * }
- *
- * \endcode
- *
- */
-
-/** Setup GETOPT
- *
- * \param goi - get opt info to be initialized
- * \param interp - jim interp
- * \param argc - argc count.
- * \param argv - argv (will be copied)
- *
- * \code
- * Jim_GetOptInfo goi;
- *
- * Jim_GetOptSetup( &goi, interp, argc, argv );
- * \endcode
- */
-
-JIM_STATIC int JIM_API( Jim_GetOpt_Setup )( Jim_GetOptInfo *goi,
- Jim_Interp *interp,
- int argc,
- Jim_Obj * const * argv );
-
-
-/** Debug - Dump parameters to stderr
- * \param goi - current parameters
- */
-JIM_STATIC void JIM_API( Jim_GetOpt_Debug )( Jim_GetOptInfo *goi);
-
-
-
-/** Remove argv[0] from the list.
- *
- * \param goi - get opt info
- * \param puthere - where param is put
- *
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_Obj)( Jim_GetOptInfo *goi, Jim_Obj **puthere );
-
-/** Remove argv[0] as string.
- *
- * \param goi - get opt info
- * \param puthere - where param is put
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_String )( Jim_GetOptInfo *goi, char **puthere, int *len );
-
-/** Remove argv[0] as double.
- *
- * \param goi - get opt info
- * \param puthere - where param is put.
- *
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_Double )( Jim_GetOptInfo *goi, double *puthere );
-
-/** Remove argv[0] as wide.
- *
- * \param goi - get opt info
- * \param puthere - where param is put.
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_Wide )( Jim_GetOptInfo *goi, jim_wide *puthere );
-
-/** Remove argv[0] as NVP.
- *
- * \param goi - get opt info
- * \param lookup - nvp lookup table
- * \param puthere - where param is put.
- *
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_Nvp)( Jim_GetOptInfo *goi, const Jim_Nvp *lookup, Jim_Nvp **puthere );
-
-/** Create an appropriate error message for an NVP.
- *
- * \param goi - options info
- * \param lookup - the NVP table that was used.
- * \param hadprefix - 0 or 1 if the option had a prefix.
- *
- * This function will set the "interp->result" to a human readable
- * error message listing the available options.
- *
- * This function assumes the previous option argv[-1] is the unknown string.
- *
- * If this option had some prefix, then pass "hadprefix=1" else pass "hadprefix=0"
- *
- * Example:
- * \code
- *
- * while( goi.argc ){
- * // Get the next option
- * e = Jim_GetOpt_Nvp( &goi, cmd_options, &n );
- * if( e != JIM_OK ){
- * // option was not recognized
- * // pass 'hadprefix=0' because there is no prefix
- * Jim_GetOpt_NvpUnknown( &goi, cmd_options, 0 );
- * return e;
- * }
- *
- * switch( n->value ){
- * case OPT_SEX:
- * // handle: --sex male|female|lots|needmore
- * e = Jim_GetOpt_Nvp( &goi, &nvp_sex, &n );
- * if( e != JIM_OK ){
- * Jim_GetOpt_NvpUnknown( &ogi, nvp_sex, 1 );
- * return e;
- * }
- * printf("Code: (%d) is %s\n", n->value, n->name );
- * break;
- * case ...:
- * [snip]
- * }
- * }
- * \endcode
- *
- */
-JIM_STATIC void JIM_API( Jim_GetOpt_NvpUnknown)( Jim_GetOptInfo *goi, const Jim_Nvp *lookup, int hadprefix );
-
-
-/** Remove argv[0] as Enum
- *
- * \param goi - get opt info
- * \param lookup - lookup table.
- * \param puthere - where param is put.
- *
- */
-JIM_STATIC int JIM_API( Jim_GetOpt_Enum)( Jim_GetOptInfo *goi, const char * const * lookup, int *puthere );
-
-
-#undef JIM_STATIC
-#undef JIM_API
-
-#ifndef __JIM_CORE__
-
-#define JIM_GET_API(name) \
- Jim_GetApi(interp, "Jim_" #name, ((void *)&Jim_ ## name))
-
-#if defined JIM_EXTENSION || defined JIM_EMBEDDED
-/* This must be included "inline" inside the extension */
-static void Jim_InitExtension(Jim_Interp *interp)
-{
- Jim_GetApi = interp->getApiFuncPtr;
-
- JIM_GET_API(Alloc);
- JIM_GET_API(Free);
- JIM_GET_API(Eval);
- JIM_GET_API(Eval_Named);
- JIM_GET_API(EvalGlobal);
- JIM_GET_API(EvalFile);
- JIM_GET_API(EvalObj);
- JIM_GET_API(EvalObjBackground);
- JIM_GET_API(EvalObjVector);
- JIM_GET_API(InitHashTable);
- JIM_GET_API(ExpandHashTable);
- JIM_GET_API(AddHashEntry);
- JIM_GET_API(ReplaceHashEntry);
- JIM_GET_API(DeleteHashEntry);
- JIM_GET_API(FreeHashTable);
- JIM_GET_API(FindHashEntry);
- JIM_GET_API(ResizeHashTable);
- JIM_GET_API(GetHashTableIterator);
- JIM_GET_API(NextHashEntry);
- JIM_GET_API(NewObj);
- JIM_GET_API(FreeObj);
- JIM_GET_API(InvalidateStringRep);
- JIM_GET_API(InitStringRep);
- JIM_GET_API(DuplicateObj);
- JIM_GET_API(GetString);
- JIM_GET_API(Length);
- JIM_GET_API(InvalidateStringRep);
- JIM_GET_API(NewStringObj);
- JIM_GET_API(NewStringObjNoAlloc);
- JIM_GET_API(AppendString);
- JIM_GET_API(AppendString_sprintf);
- JIM_GET_API(AppendObj);
- JIM_GET_API(AppendStrings);
- JIM_GET_API(StringEqObj);
- JIM_GET_API(StringMatchObj);
- JIM_GET_API(StringRangeObj);
- JIM_GET_API(FormatString);
- JIM_GET_API(ScanString);
- JIM_GET_API(CompareStringImmediate);
- JIM_GET_API(NewReference);
- JIM_GET_API(GetReference);
- JIM_GET_API(SetFinalizer);
- JIM_GET_API(GetFinalizer);
- JIM_GET_API(CreateInterp);
- JIM_GET_API(FreeInterp);
- JIM_GET_API(GetExitCode);
- JIM_GET_API(SetStdin);
- JIM_GET_API(SetStdout);
- JIM_GET_API(SetStderr);
- JIM_GET_API(CreateCommand);
- JIM_GET_API(CreateProcedure);
- JIM_GET_API(DeleteCommand);
- JIM_GET_API(RenameCommand);
- JIM_GET_API(GetCommand);
- JIM_GET_API(SetVariable);
- JIM_GET_API(SetVariableStr);
- JIM_GET_API(SetGlobalVariableStr);
- JIM_GET_API(SetVariableStrWithStr);
- JIM_GET_API(SetVariableLink);
- JIM_GET_API(GetVariable);
- JIM_GET_API(GetCallFrameByLevel);
- JIM_GET_API(Collect);
- JIM_GET_API(CollectIfNeeded);
- JIM_GET_API(GetIndex);
- JIM_GET_API(NewListObj);
- JIM_GET_API(ListInsertElements);
- JIM_GET_API(ListAppendElement);
- JIM_GET_API(ListAppendList);
- JIM_GET_API(ListLength);
- JIM_GET_API(ListIndex);
- JIM_GET_API(SetListIndex);
- JIM_GET_API(ConcatObj);
- JIM_GET_API(NewDictObj);
- JIM_GET_API(DictKey);
- JIM_GET_API(DictKeysVector);
- JIM_GET_API(GetIndex);
- JIM_GET_API(GetReturnCode);
- JIM_GET_API(EvalExpression);
- JIM_GET_API(GetBoolFromExpr);
- JIM_GET_API(GetWide);
- JIM_GET_API(GetLong);
- JIM_GET_API(SetWide);
- JIM_GET_API(NewIntObj);
- JIM_GET_API(GetDouble);
- JIM_GET_API(SetDouble);
- JIM_GET_API(NewDoubleObj);
- JIM_GET_API(WrongNumArgs);
- JIM_GET_API(SetDictKeysVector);
- JIM_GET_API(SubstObj);
- JIM_GET_API(RegisterApi);
- JIM_GET_API(PrintErrorMessage);
- JIM_GET_API(InteractivePrompt);
- JIM_GET_API(RegisterCoreCommands);
- JIM_GET_API(GetSharedString);
- JIM_GET_API(ReleaseSharedString);
- JIM_GET_API(Panic);
- JIM_GET_API(StrDup);
- JIM_GET_API(UnsetVariable);
- JIM_GET_API(GetVariableStr);
- JIM_GET_API(GetGlobalVariable);
- JIM_GET_API(GetGlobalVariableStr);
- JIM_GET_API(GetAssocData);
- JIM_GET_API(SetAssocData);
- JIM_GET_API(DeleteAssocData);
- JIM_GET_API(GetEnum);
- JIM_GET_API(GetNvp);
- JIM_GET_API(ScriptIsComplete);
- JIM_GET_API(PackageProvide);
- JIM_GET_API(PackageRequire);
- JIM_GET_API(InitStack);
- JIM_GET_API(FreeStack);
- JIM_GET_API(StackLen);
- JIM_GET_API(StackPush);
- JIM_GET_API(StackPop);
- JIM_GET_API(StackPeek);
- JIM_GET_API(FreeStackElements);
- JIM_GET_API(fprintf );
- JIM_GET_API(vfprintf );
- JIM_GET_API(fwrite );
- JIM_GET_API(fread );
- JIM_GET_API(fflush );
- JIM_GET_API(fgets );
- JIM_GET_API(Nvp_name2value);
- JIM_GET_API(Nvp_name2value_nocase);
- JIM_GET_API(Nvp_name2value_simple);
-
- JIM_GET_API(Nvp_value2name);
- JIM_GET_API(Nvp_value2name_simple);
-
-
- JIM_GET_API(Nvp_name2value_obj);
- JIM_GET_API(Nvp_value2name_obj);
- JIM_GET_API(Nvp_name2value_obj_nocase);
-
- JIM_GET_API(GetOpt_Setup);
- JIM_GET_API(GetOpt_Obj);
- JIM_GET_API(GetOpt_String);
- JIM_GET_API(GetOpt_Double);
- JIM_GET_API(GetOpt_Wide);
- JIM_GET_API(GetOpt_Nvp);
- JIM_GET_API(GetOpt_NvpUnknown);
- JIM_GET_API(GetOpt_Enum);
- JIM_GET_API(GetOpt_Debug);
- JIM_GET_API(SetResult_sprintf);
- JIM_GET_API(SetResult_NvpUnknown);
- JIM_GET_API(Debug_ArgvString);
-}
-#endif /* defined JIM_EXTENSION || defined JIM_EMBEDDED */
-
-#undef JIM_GET_API
-
-#ifdef JIM_EMBEDDED
-Jim_Interp *ExportedJimCreateInterp(void);
-static __inline__ void Jim_InitEmbedded(void) {
- Jim_Interp *i = ExportedJimCreateInterp();
- Jim_InitExtension(i);
- Jim_FreeInterp(i);
-}
-#endif /* JIM_EMBEDDED */
-#endif /* __JIM_CORE__ */
+JIM_EXPORT int JIM_API( Jim_fprintf )( Jim_Interp *interp, void *cookie, const char *fmt, ... );
+JIM_EXPORT int JIM_API( Jim_vfprintf )( Jim_Interp *interp, void *cookie, const char *fmt, va_list ap );
+
+#if 0
+JIM_EXPORT size_t JIM_API( Jim_fwrite )( Jim_Interp *interp, const void *ptr, size_t size, size_t nmeb, void *cookie );
+JIM_EXPORT size_t JIM_API( Jim_fread )( Jim_Interp *interp, void *ptr, size_t size, size_t nmeb, void *cookie );
+JIM_EXPORT int JIM_API( Jim_fflush )( Jim_Interp *interp, void *cookie );
+JIM_EXPORT char * JIM_API( Jim_fgets )( Jim_Interp *interp, char *s, int size, void *cookie );
+#endif
#ifdef __cplusplus
}
diff --git a/jimsh.c b/jimsh.c
index 862617c..ef84970 100644
--- a/jimsh.c
+++ b/jimsh.c
@@ -125,12 +125,16 @@ int main(int argc, char *const argv[])
Jim_Interp *interp;
Jim_Obj *listObj;
- Jim_InitEmbedded(); /* This is the first function embedders should call. */
-
/* Create and initialize the interpreter */
interp = Jim_CreateInterp();
Jim_RegisterCoreCommands(interp);
+ /* Register static extensions */
+ Jim_AioInit(interp);
+ Jim_EventloopInit(interp);
+ Jim_RegexpInit(interp);
+ Jim_ReaddirInit(interp);
+
/* Append the path where the executed Jim binary is contained
* in the jim_libpath list. */
listObj = Jim_GetVariableStr(interp, "jim_libpath", JIM_NONE);
diff --git a/project.spec b/project.spec
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/project.spec