diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-10-12 09:59:00 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-30 10:46:44 +1000 |
commit | b5a3077ecffc22c4cbd5b4f0a962dc57073d3ee1 (patch) | |
tree | b14febd29cf466f11691f5af323316b3118ec114 | |
parent | 84192e2a380a09ea3f5098a01b2dbe2e6fbd9335 (diff) | |
download | jimtcl-b5a3077ecffc22c4cbd5b4f0a962dc57073d3ee1.zip jimtcl-b5a3077ecffc22c4cbd5b4f0a962dc57073d3ee1.tar.gz jimtcl-b5a3077ecffc22c4cbd5b4f0a962dc57073d3ee1.tar.bz2 |
Add 'info channels'
Like 'chan names' from Tcl
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim-exec.c | 9 | ||||
-rw-r--r-- | jim.c | 41 |
2 files changed, 33 insertions, 17 deletions
@@ -194,15 +194,6 @@ static int JimCheckWaitStatus(Jim_Interp *interp, int pid, int waitStatus) } #if defined(HAVE_FORK) && !defined(HAVE_NO_FORK) - -#ifndef jim_ext_aio -FILE *Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *fhObj) -{ - Jim_SetResultString(interp, "aio not enabled", -1); - return NULL; -} -#endif - /* * Data structures of the following type are used by JimFork and * JimWaitPids to keep track of child processes. @@ -10206,7 +10206,8 @@ void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv, const Jim_SetResult(interp, objPtr); } -static Jim_Obj *JimCommandsList(Jim_Interp *interp, Jim_Obj *patternObjPtr, int procs_only) +/* type is: 0=commands, 1=procs, 2=channels */ +static Jim_Obj *JimCommandsList(Jim_Interp *interp, Jim_Obj *patternObjPtr, int type) { Jim_HashTableIterator *htiter; Jim_HashEntry *he; @@ -10218,14 +10219,25 @@ static Jim_Obj *JimCommandsList(Jim_Interp *interp, Jim_Obj *patternObjPtr, int htiter = Jim_GetHashTableIterator(&interp->commands); while ((he = Jim_NextHashEntry(htiter)) != NULL) { Jim_Cmd *cmdPtr = he->val; + Jim_Obj *cmdNameObj; - if (procs_only && cmdPtr->cmdProc != NULL) { + if (type == 1 && cmdPtr->cmdProc) { + /* not a proc */ continue; } if (pattern && !JimStringMatch(pattern, patternLen, he->key, strlen((const char *)he->key), 0)) continue; - Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, he->key, -1)); + + cmdNameObj = Jim_NewStringObj(interp, he->key, -1); + + /* Is it a channel? */ + if (type == 2 && !Jim_AioFilehandle(interp, cmdNameObj)) { + Jim_FreeNewObj(interp, cmdNameObj); + continue; + } + + Jim_ListAppendElement(interp, listObjPtr, cmdNameObj); } Jim_FreeHashTableIterator(htiter); return listObjPtr; @@ -12823,14 +12835,14 @@ static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg int mode = 0; static const char * const commands[] = { - "body", "commands", "procs", "exists", "globals", "level", "frame", "locals", + "body", "commands", "procs", "channels", "exists", "globals", "level", "frame", "locals", "vars", "version", "patchlevel", "complete", "args", "hostname", "script", "source", "stacktrace", "nameofexecutable", "returncodes", "references", NULL }; enum - { INFO_BODY, INFO_COMMANDS, INFO_PROCS, INFO_EXISTS, INFO_GLOBALS, INFO_LEVEL, INFO_FRAME, - INFO_LOCALS, INFO_VARS, INFO_VERSION, INFO_PATCHLEVEL, INFO_COMPLETE, INFO_ARGS, + { INFO_BODY, INFO_COMMANDS, INFO_PROCS, INFO_CHANNELS, INFO_EXISTS, INFO_GLOBALS, INFO_LEVEL, + INFO_FRAME, INFO_LOCALS, INFO_VARS, INFO_VERSION, INFO_PATCHLEVEL, INFO_COMPLETE, INFO_ARGS, INFO_HOSTNAME, INFO_SCRIPT, INFO_SOURCE, INFO_STACKTRACE, INFO_NAMEOFEXECUTABLE, INFO_RETURNCODES, INFO_REFERENCES, }; @@ -12855,6 +12867,11 @@ static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg break; } + case INFO_CHANNELS: +#ifndef jim_ext_aio + Jim_SetResultString(interp, "aio not enabled", -1); + return JIM_ERR; +#endif case INFO_COMMANDS: case INFO_PROCS: if (argc != 2 && argc != 3) { @@ -12862,7 +12879,7 @@ static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg return JIM_ERR; } Jim_SetResult(interp, JimCommandsList(interp, (argc == 3) ? argv[2] : NULL, - (cmd == INFO_PROCS))); + (cmd - INFO_COMMANDS))); break; case INFO_VARS: @@ -13703,13 +13720,21 @@ void Jim_SetResultFormatted(Jim_Interp *interp, const char *format, ...) Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, buf, len)); } -/* stub */ +/* stubs */ #ifndef jim_ext_package int Jim_PackageProvide(Jim_Interp *interp, const char *name, const char *ver, int flags) { return JIM_OK; } #endif +#ifndef jim_ext_aio +FILE *Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *fhObj) +{ + Jim_SetResultString(interp, "aio not enabled", -1); + return NULL; +} +#endif + /* * Local Variables: *** |