Newer
Older
return(JS_TRUE);
}
static JSBool
js_logonlist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_nodelist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_whos_online(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_spy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc && JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&node_num);
rc=JS_SUSPENDREQUEST(cx);
sbbs->spy(node_num);
JS_RESUMEREQUEST(cx, rc);
static JSBool
js_readmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 readwhich=MAIL_YOUR;
int32 usernumber;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
usernumber=sbbs->useron.number;
if(argc>0 && JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&readwhich);
if(argc>1 && JSVAL_IS_NUM(argv[1]))
JS_ValueToInt32(cx,argv[1],&usernumber);
rc=JS_SUSPENDREQUEST(cx);
sbbs->readmail(usernumber,readwhich);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_email(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 usernumber=1;
int32 mode=WM_EMAIL;
const char* top="";
const char* subj="";
JSString* js_top=NULL;
JSString* js_subj=NULL;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&usernumber);
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_STRING(argv[i]) && js_top==NULL)
js_top=JS_ValueToString(cx,argv[i]);
else if(JSVAL_IS_STRING(argv[i]))
js_subj=JS_ValueToString(cx,argv[i]);
}
if(js_top!=NULL)
top=JS_GetStringBytes(js_top);
if(js_subj!=NULL)
subj=JS_GetStringBytes(js_subj);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->email(usernumber,top,subj,mode));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_netmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=0;
const char* subj="";
JSString* js_to;
JSString* js_subj=NULL;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if((js_to=JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_STRING(argv[i]))
js_subj=JS_ValueToString(cx,argv[i]);
}
if(js_subj!=NULL)
subj=JS_GetStringBytes(js_subj);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->netmail(cstr,subj,mode));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_bulkmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
uchar* ar=(uchar*)"";
JSString* js_ars=NULL;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc) {
if((js_ars=JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
ar=arstr(NULL,JS_GetStringBytes(js_ars), &sbbs->cfg);
}
rc=JS_SUSPENDREQUEST(cx);
sbbs->bulkmail(ar);
if(ar && ar[0])
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_upload_file(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
dirnum=get_dirnum(cx,sbbs,argv[0]);
*rval = JSVAL_FALSE;
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->upload(dirnum));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_bulkupload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
dirnum=get_dirnum(cx,sbbs,argv[0]);
*rval = JSVAL_FALSE;
return(JS_TRUE);
}
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->bulkupload(dirnum)==0);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_resort_dir(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
dirnum=get_dirnum(cx,sbbs,argv[0]);
if(dirnum>=sbbs->cfg.total_dirs) {
*rval = JSVAL_FALSE;
return(JS_TRUE);
}
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
*rval = JSVAL_TRUE;
return(JS_TRUE);
}
static JSBool
js_telnet_gate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
char* addr;
int32 mode=0;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if((js_addr=JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
if((addr=JS_GetStringBytes(js_addr))==NULL)
return(JS_FALSE);
if(argc>1 && JSVAL_IS_NUM(argv[1]))
JS_ValueToInt32(cx,argv[1],&mode);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_pagesysop(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_pageguru(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_multinode_chat(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
int32 channel=1;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc>1 && JSVAL_IS_NUM(argv[1]))
JS_ValueToInt32(cx,argv[1],&channel);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_private_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_private_chat(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
JSBool local=false;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc)
JS_ValueToBoolean(cx,argv[0],&local);
rc=JS_SUSPENDREQUEST(cx);
sbbs->privchat(local ? true:false); // <- eliminates stupid msvc6 "performance warning"
JS_RESUMEREQUEST(cx, rc);
js_get_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_put_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
int32 node=0;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&node);
node=1;
if((js_msg=JS_ValueToString(cx, argv[1]))==NULL)
return(JS_FALSE);
if((msg=JS_GetStringBytes(js_msg))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(putnmsg(&sbbs->cfg,node,msg)==0);
JS_RESUMEREQUEST(cx, rc);
js_get_telegram(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
int32 usernumber;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
usernumber=sbbs->useron.number;
if(argc && JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&usernumber);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
js_put_telegram(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
int32 usernumber=0;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&usernumber);
if(usernumber<1)
usernumber=1;
if((js_msg=JS_ValueToString(cx, argv[1]))==NULL)
return(JS_FALSE);
if((msg=JS_GetStringBytes(js_msg))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(putsmsg(&sbbs->cfg,usernumber,msg)==0);
JS_RESUMEREQUEST(cx, rc);
static JSBool
js_cmdstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
char* p;
const char* fpath="";
const char* fspec="";
JSString* js_str;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
js_str = JS_ValueToString(cx, argv[0]);
if (!js_str)
return(JS_FALSE);
p=JS_GetStringBytes(js_str);
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_STRING(argv[i])) {
js_str = JS_ValueToString(cx, argv[i]);
if(fpath==NULL)
fpath=JS_GetStringBytes(js_str);
else
fspec=JS_GetStringBytes(js_str);
}
}
rc=JS_SUSPENDREQUEST(cx);
p=sbbs->cmdstr(p,fpath,fspec,NULL);
JS_RESUMEREQUEST(cx, rc);
if((js_str=JS_NewStringCopyZ(cx, p))==NULL)
return(JS_FALSE);
*rval = STRING_TO_JSVAL(js_str);
return(JS_TRUE);
}
static JSBool
js_getfilespec(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
char* p;
char tmp[128];
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
p=sbbs->getfilespec(tmp);
JS_RESUMEREQUEST(cx, rc);
if(p==NULL)
*rval=JSVAL_NULL;
else {
JSString* js_str = JS_NewStringCopyZ(cx, p);
if(js_str==NULL)
return(JS_FALSE);
*rval = STRING_TO_JSVAL(js_str);
}
return(JS_TRUE);
}
static JSBool
js_listfiles(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=0;
const char* fspec=ALLFILES;
char buf[MAX_PATH+1];
uint dirnum;
JSString* js_str;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
dirnum=get_dirnum(cx,sbbs,argv[0]);
if(dirnum>=sbbs->cfg.total_dirs) {
*rval = INT_TO_JSVAL(0);
return(JS_TRUE);
}
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_STRING(argv[i])) {
js_str = JS_ValueToString(cx, argv[i]);
fspec=JS_GetStringBytes(js_str);
}
}
rc=JS_SUSPENDREQUEST(cx);
if(!(mode&(FL_FINDDESC|FL_EXFIND)))
fspec=padfname(fspec,buf);
*rval = INT_TO_JSVAL(sbbs->listfiles(dirnum,fspec,0 /* tofile */,mode));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_listfileinfo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=FI_INFO;
const char* fspec=ALLFILES;
char buf[MAX_PATH+1];
uint dirnum;
JSString* js_str;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
dirnum=get_dirnum(cx,sbbs,argv[0]);
if(dirnum>=sbbs->cfg.total_dirs) {
*rval = INT_TO_JSVAL(0);
return(JS_TRUE);
}
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_STRING(argv[i])) {
js_str = JS_ValueToString(cx, argv[i]);
fspec=JS_GetStringBytes(js_str);
}
}
rc=JS_SUSPENDREQUEST(cx);
*rval = INT_TO_JSVAL(sbbs->listfileinfo(dirnum,padfname(fspec,buf),mode));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_postmsg(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=0;
uint subnum;
uintN n;
JSObject* hdrobj;
sbbs_t* sbbs;
smbmsg_t* remsg=NULL;
smbmsg_t msg;
*rval = JSVAL_FALSE;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
subnum=get_subnum(cx,sbbs,argv[0]);
if(subnum>=sbbs->cfg.total_subs) // invalid sub-board
return(JS_TRUE);
ZERO_VAR(msg);
for(n=1; n<argc; n++) {
if(JSVAL_IS_NUM(argv[n]))
JS_ValueToInt32(cx,argv[n],&mode);
else if(JSVAL_IS_OBJECT(argv[n])) {
if((hdrobj=JSVAL_TO_OBJECT(argv[n]))==NULL)
return(JS_TRUE);
remsg=&msg;
if(!js_ParseMsgHeaderObject(cx,hdrobj,remsg))
return(JS_TRUE);
}
}
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->postmsg(subnum,remsg,mode));
smb_freemsgmem(&msg);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_msgscan_cfg(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=SUB_CFG_NSCAN;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc && JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],&mode);
rc=JS_SUSPENDREQUEST(cx);
sbbs->new_scan_cfg(mode);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_msgscan_ptrs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
sbbs->new_scan_ptr_cfg();
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_msgscan_reinit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
for(uint i=0;i<sbbs->cfg.total_subs;i++) {
sbbs->subscan[i].ptr=sbbs->subscan[i].sav_ptr;
sbbs->subscan[i].last=sbbs->subscan[i].sav_last;
}
sbbs->bputs(sbbs->text[MsgPtrsInitialized]);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_scansubs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=SCAN_NEW;
BOOL all=FALSE;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
for(uintN i=0;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_BOOLEAN(argv[i]))
all=JSVAL_TO_BOOLEAN(argv[i]);
}
rc=JS_SUSPENDREQUEST(cx);
if(all)
sbbs->scanallsubs(mode);
else
sbbs->scansubs(mode);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_scandirs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
int32 mode=0;
BOOL all=FALSE;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
for(uintN i=0;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_BOOLEAN(argv[i]))
all=JSVAL_TO_BOOLEAN(argv[i]);
}
rc=JS_SUSPENDREQUEST(cx);
if(all)
sbbs->scanalldirs(mode);
else
sbbs->scandirs(mode);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_scanposts(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
const char* find="";
int32 mode=0;
uint subnum;
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
subnum=get_subnum(cx,sbbs,argv[0]);
if(subnum>=sbbs->cfg.total_subs) { // invalid sub-board
*rval = JSVAL_FALSE;
return(JS_TRUE);
}
for(uintN i=1;i<argc;i++) {
if(JSVAL_IS_NUM(argv[i]))
JS_ValueToInt32(cx,argv[i],&mode);
else if(JSVAL_IS_STRING(argv[i]))
find=JS_GetStringBytes(JS_ValueToString(cx,argv[i]));
}
if(*find)
mode|=SCAN_FIND;
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->scanposts(subnum,mode,find)==0);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_listmsgs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
const char* find="";
int32 mode=0;
int32 start=0;
uint subnum;
sbbs_t* sbbs;
uintN argn=0;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
*rval = INT_TO_JSVAL(0);
subnum=get_subnum(cx,sbbs,argv[argn++]);
if(subnum>=sbbs->cfg.total_subs) // invalid sub-board
return(JS_TRUE);
if(JSVAL_IS_NUM(argv[argn]))
JS_ValueToInt32(cx,argv[argn++],&mode);
if(JSVAL_IS_NUM(argv[argn]))
JS_ValueToInt32(cx,argv[argn++],&start);
if(JSVAL_IS_STRING(argv[argn]))
find=JS_GetStringBytes(JS_ValueToString(cx,argv[argn++]));
rc=JS_SUSPENDREQUEST(cx);
*rval = INT_TO_JSVAL(sbbs->listsub(subnum,mode,start,find));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_getnstime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
time_t t=time(NULL);
sbbs_t* sbbs;
*rval = JSVAL_NULL;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
if(argc && JSVAL_IS_NUM(argv[0]))
JS_ValueToInt32(cx,argv[0],(int32*)&t);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_select_shell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->select_shell());
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_select_editor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
*rval = BOOLEAN_TO_JSVAL(sbbs->select_editor());
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_get_time_left(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
sbbs_t* sbbs;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
*rval = INT_TO_JSVAL(sbbs->gettimeleft());
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
static JSBool
js_chk_ar(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
uchar* ar;
JSString* js_str;
sbbs_t* sbbs;
jsrefcount rc;
if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
return JS_FALSE;
if((js_str=JS_ValueToString(cx, argv[0]))==NULL)
return JS_FALSE;
rc=JS_SUSPENDREQUEST(cx);
ar = arstr(NULL,JS_GetStringBytes(js_str),&sbbs->cfg);
*rval = BOOLEAN_TO_JSVAL(sbbs->chk_ar(ar,&sbbs->useron,&sbbs->client));
if(ar!=NULL && ar!=nular)
free(ar);
JS_RESUMEREQUEST(cx, rc);
return JS_TRUE;
}
static jsSyncMethodSpec js_bbs_functions[] = {
{"atcode", js_atcode, 1, JSTYPE_STRING, JSDOCSTR("code_string")
,JSDOCSTR("returns @-code value, specified <i>code</i> string does not include @ character delimiters")
,310
},
{"text", js_text, 1, JSTYPE_STRING, JSDOCSTR("line_number")
,JSDOCSTR("returns specified text string from text.dat")
,310
},
{"replace_text", js_replace_text, 2, JSTYPE_BOOLEAN, JSDOCSTR("line_number, string text")
,JSDOCSTR("replaces specified text string in memory")
,310
},
{"revert_text", js_revert_text, 1, JSTYPE_BOOLEAN, JSDOCSTR("[line_number=<i>all</i>]")
,JSDOCSTR("reverts specified text string to original text string; "
"if <i>line_number</i> unspecified, reverts all text lines")
,310
},
{"load_text", js_load_text, 1, JSTYPE_BOOLEAN, JSDOCSTR("base_filename")
,JSDOCSTR("load an alternate text.dat from ctrl directory, automatically appends '.dat' to basefilename")
,310
},
{"newuser", js_newuser, 0, JSTYPE_VOID, JSDOCSTR("")
,310
},
{"login", js_login, 2, JSTYPE_BOOLEAN, JSDOCSTR("user_name, password_prompt")
,JSDOCSTR("login with <i>user_name</i>, displaying <i>password_prompt</i> for password (if required)")
,310
},
{"logon", js_logon, 0, JSTYPE_BOOLEAN, JSDOCSTR("")
,310
},
{"logoff", js_logoff, 1, JSTYPE_VOID, JSDOCSTR("[prompt=<i>true</i>]")
,JSDOCSTR("interactive logoff procedure, pass <i>false</i> for <i>prompt</i> argument to avoid yes/no prompt")
,315
},
{"logout", js_logout, 0, JSTYPE_VOID, JSDOCSTR("")
,310
},
{"hangup", js_hangup, 0, JSTYPE_VOID, JSDOCSTR("")
,310
},
{"node_sync", js_nodesync, 0, JSTYPE_ALIAS },
{"nodesync", js_nodesync, 0, JSTYPE_VOID, JSDOCSTR("")
,JSDOCSTR("synchronize with node database, checks for messages, interruption, etc. (AKA node_sync)")
,310
},
{"auto_msg", js_automsg, 0, JSTYPE_VOID, JSDOCSTR("")
,JSDOCSTR("read/create system's auto-message")
,310
},
{"time_bank", js_time_bank, 0, JSTYPE_VOID, JSDOCSTR("")
,JSDOCSTR("enter the time banking system")
,310
},
{"qwk_sec", js_qwk_sec, 0, JSTYPE_VOID, JSDOCSTR("")