From 4eb129df967dbbef951f8c4d26dd01b0bd73b151 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 9 Jul 2003 01:11:36 +0000 Subject: [PATCH] Created read and readln method (to read from stdin). Destroy JS context and runtime after script terminates. --- src/sbbs3/jsexec.c | 64 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index 3a8b46e2af..dc1d94204c 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -117,6 +117,51 @@ js_log(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } +static JSBool +js_read(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + char* buf; + int rd; + int32 len=128; + + *rval = JSVAL_VOID; + + JS_ValueToInt32(cx,argv[0],&len); + if((buf=malloc(len))==NULL) + return(JS_TRUE); + + rd=fread(buf,sizeof(char),len,stdin); + + if(rd>=0) + *rval = STRING_TO_JSVAL(JS_NewStringCopyN(cx,buf,rd)); + + free(buf); + return(JS_TRUE); +} + +static JSBool +js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + char* buf; + char* p; + int32 len=128; + + *rval = JSVAL_VOID; + + JS_ValueToInt32(cx,argv[0],&len); + if((buf=malloc(len+1))==NULL) + return(JS_TRUE); + + p=fgets(buf,len+1,stdin); + + if(p!=NULL) + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,p)); + + free(buf); + return(JS_TRUE); +} + + static JSBool js_write(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -137,7 +182,7 @@ js_write(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) } static JSBool -js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +js_writeln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { if(!js_write(cx,obj,argc,argv,rval)) return(JS_FALSE); @@ -245,9 +290,11 @@ js_prompt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) static jsMethodSpec js_global_functions[] = { {"log", js_log, 1}, + {"read", js_read, 1}, + {"readln", js_readln, 1}, {"write", js_write, 0}, - {"writeln", js_print, 0}, - {"print", js_print, 0}, + {"writeln", js_writeln, 0}, + {"print", js_writeln, 0}, {"printf", js_printf, 1}, {"alert", js_alert, 1}, {"prompt", js_prompt, 1}, @@ -469,6 +516,7 @@ int main(int argc, char **argv, char** environ) char* module=NULL; char* p; int argn; + long result; confp=stdout; errfp=stderr; @@ -569,7 +617,15 @@ int main(int argc, char **argv, char** environ) } fprintf(statfp,"\n"); - bail(js_exec(module,&argv[argn])); + result=js_exec(module,&argv[argn]); + + fprintf(statfp,"\n"); + fprintf(statfp,"JavaScript: Destroying context\n"); + JS_DestroyContext(js_cx); + fprintf(statfp,"JavaScript: Destroying runtime\n"); + JS_DestroyRuntime(js_runtime); + + bail(result); return(-1); /* never gets here */ } -- GitLab