diff options
author | patthoyts <patthoyts> | 2005-03-08 13:45:20 +0000 |
---|---|---|
committer | patthoyts <patthoyts> | 2005-03-08 13:45:20 +0000 |
commit | 13e52adb1dea991b724c50d4e2019eda1f517cd5 (patch) | |
tree | 7c3effaecbdea990dfd9ff7696678a975434c5cd /jimsh.c | |
parent | d5990c487e0cb9edbf973ff1a58ea45a1c767e1e (diff) | |
download | jimtcl-13e52adb1dea991b724c50d4e2019eda1f517cd5.zip jimtcl-13e52adb1dea991b724c50d4e2019eda1f517cd5.tar.gz jimtcl-13e52adb1dea991b724c50d4e2019eda1f517cd5.tar.bz2 |
Added [info patchlevel] and setup argv0 and argv variables in jimsh.
Changed Jim_InteractivePrompt to take a pre-initialized interpreter.
Diffstat (limited to 'jimsh.c')
-rw-r--r-- | jimsh.c | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -4,28 +4,39 @@ #define JIM_EMBEDDED #include "jim.h" -int main(int argc, char **argv) +int main(int argc, char *const argv[]) { - int retcode; + int retcode, n; Jim_Interp *interp; + Jim_Obj *listObj, *argObj[2]; Jim_InitEmbedded(); /* This is the first function embedders should call. */ - if (argc == 1) - return Jim_InteractivePrompt(); + /* Create and initialize the interpreter */ + interp = Jim_CreateInterp(); + Jim_RegisterCoreCommands(interp); - /* Load the program */ - if (argc != 2) { - fprintf(stderr, "usage: jimsh [FILENAME] [ARGUMENTS ...]\n"); - exit(1); + listObj = Jim_NewListObj(interp, NULL, 0); + for (n = 2; n < argc; n++) { + Jim_Obj *obj = Jim_NewStringObjNoAlloc(interp, argv[n], -1); + Jim_ListAppendElement(interp, listObj, obj); } - /* Run it */ - interp = Jim_CreateInterp(); - Jim_RegisterCoreCommands(interp); - if ((retcode = Jim_EvalFile(interp, argv[1])) == JIM_ERR) { - Jim_PrintErrorMessage(interp); + argObj[0] = Jim_NewStringObj(interp, "argv0", -1); + argObj[1] = Jim_NewStringObj(interp, "argv", -1); + for (n = 0; n < 2; n++) Jim_IncrRefCount(argObj[n]); + Jim_SetVariable(interp, argObj[0], Jim_NewStringObjNoAlloc(interp, argv[0], -1)); + Jim_SetVariable(interp, argObj[1], listObj); + + if (argc == 1) { + retcode = Jim_InteractivePrompt(interp); + } else { + if ((retcode = Jim_EvalFile(interp, argv[1])) == JIM_ERR) { + Jim_PrintErrorMessage(interp); + } } + + for (n = 0; n < 2; n++) Jim_DecrRefCount(interp, argObj[n]); Jim_FreeInterp(interp); return retcode; } |