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-interactive.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-interactive.c')
-rw-r--r-- | jim-interactive.c | 62 |
1 files changed, 62 insertions, 0 deletions
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; +} + |