diff options
author | Steve Bennett <steveb@workware.net.au> | 2009-07-27 10:11:30 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 10:11:01 +1000 |
commit | 0423aa4420d853a8f81a0579910d7f39b720f851 (patch) | |
tree | 65d9210088f9986fc6a1ca25a05c044d8f024000 /jim.c | |
parent | b991f24341f4eaf7da1c32f8362ccb2a2d4dc355 (diff) | |
download | jimtcl-0423aa4420d853a8f81a0579910d7f39b720f851.zip jimtcl-0423aa4420d853a8f81a0579910d7f39b720f851.tar.gz jimtcl-0423aa4420d853a8f81a0579910d7f39b720f851.tar.bz2 |
Strip out unneeded junk from Jim
Nvp, getopt, move interactive processing to jim-interactive.c
Diffstat (limited to 'jim.c')
-rw-r--r-- | jim.c | 841 |
1 files changed, 56 insertions, 785 deletions
@@ -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 *** |