diff --git a/src/sbbs3/getstr.cpp b/src/sbbs3/getstr.cpp index 93f422999b725ec60c5c9fa327baad1d685f709c..8b3032a3b929bf2f3fd632966299d35623cb8b00 100644 --- a/src/sbbs3/getstr.cpp +++ b/src/sbbs3/getstr.cpp @@ -581,7 +581,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode) /* Returns a valid number between 1 and max, 0 if no number entered, or -1 */ /* if the user hit 'Q' or ctrl-c */ /****************************************************************************/ -long sbbs_t::getnum(ulong max) +long sbbs_t::getnum(ulong max, ulong dflt) { uchar ch,n=0; long i=0; @@ -610,6 +610,8 @@ long sbbs_t::getnum(ulong max) else if(ch==CR) { CRLF; lncntr=0; + if(!n) + return(dflt); return(i); } else if((ch==BS || ch==DEL) && n) { @@ -617,7 +619,7 @@ long sbbs_t::getnum(ulong max) i/=10; n--; } - else if(isdigit(ch) && (i*10UL)+(ch&0xf)<=max && (ch!='0' || n)) { + else if(isdigit(ch) && (i*10UL)+(ch&0xf)<=max && (dflt || ch!='0' || n)) { i*=10L; n++; i+=ch&0xf; diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp index 04898dc5ad2c91d7fca405cbff704a8a4720ee25..31d74df849029931f79f98d887f5e2fc5f66e09f 100644 --- a/src/sbbs3/js_console.cpp +++ b/src/sbbs3/js_console.cpp @@ -494,6 +494,7 @@ static JSBool js_getnum(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { ulong maxnum=~0; + ulong dflt=0; sbbs_t* sbbs; if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) @@ -501,8 +502,10 @@ js_getnum(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) if(argc && JSVAL_IS_NUMBER(argv[0])) JS_ValueToInt32(cx,argv[0],(int32*)&maxnum); + if(argc>1 && JSVAL_IS_NUMBER(argv[1])) + JS_ValueToInt32(cx,argv[1],(int32*)&dflt); - *rval = INT_TO_JSVAL(sbbs->getnum(maxnum)); + *rval = INT_TO_JSVAL(sbbs->getnum(maxnum,dflt)); return(JS_TRUE); } @@ -1246,8 +1249,8 @@ static jsSyncMethodSpec js_console_functions[] = { "see <tt>K_*</tt> in <tt>sbbsdefs.js</tt> for <i>mode</i> bits") ,310 }, - {"getnum", js_getnum, 0, JSTYPE_NUMBER, JSDOCSTR("[maxnum]") - ,JSDOCSTR("get a number between 1 and <i>maxnum</i> from the user") + {"getnum", js_getnum, 0, JSTYPE_NUMBER, JSDOCSTR("[maxnum[, default]]") + ,JSDOCSTR("get a number between 1 and <i>maxnum</i> from the user with a default value of <i>default</i>") ,310 }, {"getkeys", js_getkeys, 1, JSTYPE_NUMBER, JSDOCSTR("string keys [,maxnum]") diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index e424887d1f3918106ab5db1c6e72f987a374bdca..f7442078f5682bb0a3efc8ae3ccfb0e18cd56bd2 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -520,7 +520,7 @@ public: /* getstr.cpp */ size_t getstr_offset; size_t getstr(char *str, size_t length, long mode); - long getnum(ulong max); + long getnum(ulong max, ulong dflt=0); void insert_indicator(void); /* getkey.cpp */