aboutsummaryrefslogtreecommitdiff
path: root/jimsh.c
diff options
context:
space:
mode:
authorpatthoyts <patthoyts>2005-03-08 13:45:20 +0000
committerpatthoyts <patthoyts>2005-03-08 13:45:20 +0000
commit13e52adb1dea991b724c50d4e2019eda1f517cd5 (patch)
tree7c3effaecbdea990dfd9ff7696678a975434c5cd /jimsh.c
parentd5990c487e0cb9edbf973ff1a58ea45a1c767e1e (diff)
downloadjimtcl-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.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/jimsh.c b/jimsh.c
index 2b43948..41fca1f 100644
--- a/jimsh.c
+++ b/jimsh.c
@@ -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;
}