diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index 87078c96ec2adafad4f68fe16e9bb3a1290aeacf..f0fb377d03609402e7f3b33290ec1f64ec842584 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -60,6 +60,7 @@ char revision[16]; BOOL pause_on_exit=FALSE; BOOL pause_on_error=FALSE; BOOL terminated=FALSE; +BOOL terminate_immediately=FALSE; void banner(FILE* fp) { @@ -87,6 +88,7 @@ void usage(FILE* fp) "\t-e send error messages to console instead of stderr\n" "\t-n send status messages to %s instead of stdout\n" "\t-q send console messages to %s instead of stderr\n" + "\t-x terminate immediately on local abort signal\n" "\t-p wait for keypress (pause) on exit\n" "\t-! wait for keypress (pause) on error\n" ,JAVASCRIPT_MAX_BYTES @@ -403,6 +405,9 @@ js_BranchCallback(JSContext *cx, JSScript *script) if(terminated) { + if(terminate_immediately) + return(JS_FALSE); + if(JS_GetProperty(js_cx, js_glob, "server", &val) && val!=JSVAL_VOID) obj=JSVAL_TO_OBJECT(val); @@ -622,7 +627,7 @@ long js_exec(const char *fname, char** args) void break_handler(int type) { - fprintf(stderr,"\n-> Terminated Locally (%d)<-\n",type); + fprintf(stderr,"\n-> Terminated Locally (signal: %d)\n",type); terminated=TRUE; } @@ -689,6 +694,9 @@ int main(int argc, char **argv, char** environ) case 'n': statfp=nulfp; break; + case 'x': + terminate_immediately=TRUE; + break; case 'p': pause_on_exit=TRUE; break;