diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index d8b5cf5124e6179e61355285244905e70caf6bfc..ae9bf8761c66ad890fb971bd34fd49cb7e49496b 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -1109,11 +1109,12 @@ static JSBool js_prompt(JSContext *cx, uintN argc, jsval *arglist) { jsval *argv=JS_ARGV(cx, arglist); - char instr[81]; + char instr[128] = ""; JSString * str; sbbs_t* sbbs; jsrefcount rc; char* prompt=NULL; + int32 mode = K_EDIT; size_t result; JS_SET_RVAL(cx, arglist, JSVAL_VOID); @@ -1121,16 +1122,22 @@ js_prompt(JSContext *cx, uintN argc, jsval *arglist) if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) return(JS_FALSE); - if(argc) { - JSVALUE_TO_MSTRING(cx, argv[0], prompt, NULL); + uintN argn = 0; + if(argc > argn && JSVAL_IS_STRING(argv[argn])) { + JSVALUE_TO_MSTRING(cx, argv[argn], prompt, NULL); if(prompt==NULL) return(JS_FALSE); + argn++; + } + if(argc > argn && JSVAL_IS_STRING(argv[argn])) { + JSVALUE_TO_STRBUF(cx, argv[argn], instr, sizeof(instr), NULL); + argn++; + } + if(argc > argn && JSVAL_IS_NUMBER(argv[argn])) { + if(!JS_ValueToInt32(cx,argv[argn], &mode)) + return JS_FALSE; + argn++; } - - if(argc>1) { - JSVALUE_TO_STRBUF(cx, argv[1], instr, sizeof(instr), NULL); - } else - instr[0]=0; rc=JS_SUSPENDREQUEST(cx); if(prompt != NULL) { @@ -1138,7 +1145,7 @@ js_prompt(JSContext *cx, uintN argc, jsval *arglist) free(prompt); } - result = sbbs->getstr(instr,sizeof(instr)-1,K_EDIT); + result = sbbs->getstr(instr, sizeof(instr)-1, mode); sbbs->attr(LIGHTGRAY); if(!result) { JS_SET_RVAL(cx, arglist, JSVAL_NULL); @@ -1191,8 +1198,8 @@ static jsSyncMethodSpec js_global_functions[] = { ,JSDOCSTR("print an alert message (ala client-side JS)") ,310 }, - {"prompt", js_prompt, 1, JSTYPE_STRING, JSDOCSTR("[value]") - ,JSDOCSTR("displays a prompt (<i>value</i>) and returns a string of user input (ala clent-side JS)") + {"prompt", js_prompt, 1, JSTYPE_STRING, JSDOCSTR("[text] [,value] [,mode=K_EDIT]") + ,JSDOCSTR("displays a prompt (<i>text</i>) and returns a string of user input (ala client-side JS)") ,310 }, {"confirm", js_confirm, 1, JSTYPE_BOOLEAN, JSDOCSTR("value")