From d4f9b681510d75ff80de742cfcf09cf8699a3632 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sun, 24 Jun 2001 01:16:41 +0000 Subject: [PATCH] Added text string (from TEXT.DAT) manipulation methods. --- src/sbbs3/js_bbs.cpp | 156 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp index 8a9e55f4a1..e257e656ee 100644 --- a/src/sbbs3/js_bbs.cpp +++ b/src/sbbs3/js_bbs.cpp @@ -427,7 +427,163 @@ js_chksyspass(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval return(JS_TRUE); } +static JSBool +js_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + int i; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + i=JSVAL_TO_INT(argv[0]); + i--; + + if(i<0 || i>=TOTAL_TEXT) + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, "-Invalid Text Index-")); + else + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, sbbs->text[i])); + + return(JS_TRUE); +} + +static JSBool +js_replace_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + char* p; + int i,len; + JSString* js_str; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + i=JSVAL_TO_INT(argv[0]); + i--; + + if(i<0 || i>=TOTAL_TEXT) { + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + return(JS_TRUE); + } + + if(sbbs->text[i]!=sbbs->text_sav[i] && sbbs->text[i]!=nulstr) + FREE(sbbs->text[i]); + + if((js_str=JS_ValueToString(cx, argv[1]))==NULL) { + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + return(JS_TRUE); + } + + if((p=JS_GetStringBytes(js_str))==NULL) { + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + return(JS_TRUE); + } + + len=strlen(p); + if(!len) + sbbs->text[i]=nulstr; + else + sbbs->text[i]=(char *)MALLOC(len+1); + if(sbbs->text[i]==NULL) { + sbbs->text[i]=sbbs->text_sav[i]; + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + } else { + strcpy(sbbs->text[i],p); + *rval = BOOLEAN_TO_JSVAL(JS_TRUE); + } + + return(JS_TRUE); +} + +static JSBool +js_revert_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + int i; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + i=JSVAL_TO_INT(argv[0]); + i--; + + if(i<0 || i>=TOTAL_TEXT) { + for(i=0;i<TOTAL_TEXT;i++) { + if(sbbs->text[i]!=sbbs->text_sav[i] && sbbs->text[i]!=nulstr) + FREE(sbbs->text[i]); + sbbs->text[i]=sbbs->text_sav[i]; + } + } else { + if(sbbs->text[i]!=sbbs->text_sav[i] && sbbs->text[i]!=nulstr) + FREE(sbbs->text[i]); + sbbs->text[i]=sbbs->text_sav[i]; + } + + *rval = BOOLEAN_TO_JSVAL(JS_TRUE); + + return(JS_TRUE); +} + +static JSBool +js_load_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + int i; + char path[MAX_PATH+1]; + FILE* stream; + JSString* js_str; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + if((js_str=JS_ValueToString(cx, argv[0]))==NULL) { + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + return(JS_TRUE); + } + + for(i=0;i<TOTAL_TEXT;i++) { + if(sbbs->text[i]!=sbbs->text_sav[i]) { + if(sbbs->text[i]!=nulstr) + FREE(sbbs->text[i]); + sbbs->text[i]=sbbs->text_sav[i]; + } + } + sprintf(path,"%s%s.dat" + ,sbbs->cfg.ctrl_dir,JS_GetStringBytes(js_str)); + + if((stream=fnopen(NULL,path,O_RDONLY))==NULL) { + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + return(JS_TRUE); + } + for(i=0;i<TOTAL_TEXT && !feof(stream);i++) { + if((sbbs->text[i]=readtext((long *)NULL,stream))==NULL) { + i--; + continue; + } + if(!strcmp(sbbs->text[i],sbbs->text_sav[i])) { /* If identical */ + FREE(sbbs->text[i]); /* Don't alloc */ + sbbs->text[i]=sbbs->text_sav[i]; + } + else if(sbbs->text[i][0]==0) { + FREE(sbbs->text[i]); + sbbs->text[i]=nulstr; + } + } + if(i<TOTAL_TEXT) + *rval = BOOLEAN_TO_JSVAL(JS_FALSE); + else + *rval = BOOLEAN_TO_JSVAL(JS_TRUE); + + fclose(stream); + + return(JS_TRUE); +} + static JSFunctionSpec js_bbs_functions[] = { + {"text", js_text, 1}, // return text string from text.dat + {"replace_text", js_replace_text, 2}, // replace a text string + {"revert_text", js_revert_text, 0}, // revert to original text string + {"load_text", js_load_text, 1}, // load an alternate text.dat {"menu", js_menu, 1}, // show menu {"hangup", js_hangup, 0}, // hangup immediately {"exec", js_exec, 2}, // execute command line with mode -- GitLab