diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | jim-aio.c | 97 | ||||
-rw-r--r-- | jim-eventloop.c | 9 | ||||
-rw-r--r-- | jim-eventloop.h | 45 | ||||
-rw-r--r-- | jim-interactive.c | 62 | ||||
-rw-r--r-- | jim-posix.c | 28 | ||||
-rw-r--r-- | jim-readdir.c | 3 | ||||
-rw-r--r-- | jim-readline.c | 3 | ||||
-rw-r--r-- | jim-regexp.c | 3 | ||||
-rw-r--r-- | jim-sqlite3.c | 3 | ||||
-rw-r--r-- | jim.c | 841 | ||||
-rw-r--r-- | jim.h | 720 | ||||
-rw-r--r-- | jimsh.c | 8 | ||||
-rw-r--r-- | project.spec | 0 |
14 files changed, 308 insertions, 1516 deletions
@@ -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: @@ -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); @@ -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 *** @@ -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 } @@ -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 |