From 9e08a00ce29ba9d39d96f2dbad9495ce4efe3522 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 3 May 2001 23:30:12 +0000 Subject: [PATCH] Created js_CreateTerminalObject() to create Telnet Server terminal object. --- src/sbbs3/main.cpp | 6 ++ src/sbbs3/sbbs.h | 2 + src/sbbs3/termobj.cpp | 197 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 src/sbbs3/termobj.cpp diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index cd0c8e6029..b63f81962e 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -279,12 +279,14 @@ bool sbbs_t::js_initcx() JS_SetContextPrivate(js_cx, this); /* Store a pointer to sbbs_t instance */ + /* Global Object */ if((js_glob=js_CreateGlobalObject(&cfg, js_cx))==NULL) break; if (!JS_DefineFunctions(js_cx, js_glob, js_global_functions)) break; + /* System Object */ JSObject* sysobj; if((sysobj=js_CreateSystemObject(&cfg, js_cx, js_glob))==NULL) @@ -301,6 +303,10 @@ bool sbbs_t::js_initcx() if(!JS_SetProperty(js_cx, sysobj, "version_detail", &val)) break; + /* Terminal Object */ + if(js_CreateTerminalObject(js_cx, js_glob)==NULL) + break; + success=true; } while(0); diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index cd7504b9b9..bd39c3f718 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -787,6 +787,8 @@ extern "C" { /* fileobj.c */ DLLEXPORT JSObject* DLLCALL js_CreateFileAreaObject(scfg_t* cfg, JSContext* cx, JSObject* parent ,user_t* user, char* html_index_file); + /* termobj.cpp */ + JSObject* js_CreateTerminalObject(JSContext* cx, JSObject* parent); #endif diff --git a/src/sbbs3/termobj.cpp b/src/sbbs3/termobj.cpp new file mode 100644 index 0000000000..7036ced1a5 --- /dev/null +++ b/src/sbbs3/termobj.cpp @@ -0,0 +1,197 @@ +/* termobj.cpp */ + +/* Synchronet JavaScript "Terminal" Object */ + +/* $Id$ */ + +/**************************************************************************** + * @format.tab-size 4 (Plain Text/Source Code File Header) * + * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * + * * + * Copyright 2001 Rob Swindell - http://www.synchro.net/copyright.html * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * See the GNU General Public License for more details: gpl.txt or * + * http://www.fsf.org/copyleft/gpl.html * + * * + * Anonymous FTP access to the most recent released source is available at * + * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * + * * + * Anonymous CVS access to the development source and modification history * + * is available at cvs.synchro.net:/cvsroot/sbbs, example: * + * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * + * (just hit return, no password is necessary) * + * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * + * * + * For Synchronet coding style and modification guidelines, see * + * http://www.synchro.net/source.html * + * * + * You are encouraged to submit any modifications (preferably in Unix diff * + * format) via e-mail to mods@synchro.net * + * * + * Note: If this box doesn't appear square, then you need to fix your tabs. * + ****************************************************************************/ + +#include "sbbs.h" + +#ifdef JAVASCRIPT + +/* Terminal Object Properites */ +enum { + TERM_PROP_ONLINE + ,TERM_PROP_STATUS + ,TERM_PROP_CONSOLE + ,TERM_PROP_LNCNTR + ,TERM_PROP_TOS + ,TERM_PROP_ROWS + ,TERM_PROP_AUTOTERM + ,TERM_PROP_TIMEOUT /* User inactivity timeout reference */ + ,TERM_PROP_TIMELEFT_WARN /* low timeleft warning flag */ +}; + +static JSBool js_terminal_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + ulong val; + jsint tiny; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + tiny = JSVAL_TO_INT(id); + + switch(tiny) { + case TERM_PROP_ONLINE: + val=sbbs->online; + break; + case TERM_PROP_STATUS: + val=sbbs->sys_status; + break; + case TERM_PROP_CONSOLE: + val=sbbs->console; + break; + case TERM_PROP_LNCNTR: + val=sbbs->lncntr; + break; + case TERM_PROP_TOS: + val=sbbs->tos; + break; + case TERM_PROP_ROWS: + val=sbbs->rows; + break; + case TERM_PROP_AUTOTERM: + val=sbbs->autoterm; + break; + case TERM_PROP_TIMEOUT: + val=sbbs->timeout; + break; + case TERM_PROP_TIMELEFT_WARN: + val=sbbs->timeleft_warn; + break; + default: + return(JS_TRUE); + } + + *vp = INT_TO_JSVAL(val); + + return(JS_TRUE); +} + +static JSBool js_terminal_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + long val; + jsint tiny; + sbbs_t* sbbs; + + if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) + return(JS_FALSE); + + tiny = JSVAL_TO_INT(id); + + JS_ValueToInt32(cx, *vp, &val); + + switch(tiny) { + case TERM_PROP_ONLINE: + sbbs->online=val; + break; + case TERM_PROP_STATUS: + sbbs->sys_status=val; + break; + case TERM_PROP_CONSOLE: + sbbs->console=val; + break; + case TERM_PROP_LNCNTR: + sbbs->lncntr=val; + break; + case TERM_PROP_TOS: + sbbs->tos=val; + break; + case TERM_PROP_ROWS: + sbbs->rows=val; + break; + case TERM_PROP_AUTOTERM: + sbbs->autoterm=val; + break; + case TERM_PROP_TIMEOUT: + sbbs->timeout=val; + break; + case TERM_PROP_TIMELEFT_WARN: + sbbs->timeleft_warn=val; + break; + default: + return(JS_TRUE); + } + + return(JS_TRUE); +} + + +static JSClass js_terminal_class = { + "Terminal" /* name */ + ,0 /* flags */ + ,JS_PropertyStub /* addProperty */ + ,JS_PropertyStub /* delProperty */ + ,js_terminal_get /* getProperty */ + ,js_terminal_set /* setProperty */ + ,JS_EnumerateStub /* enumerate */ + ,JS_ResolveStub /* resolve */ + ,JS_ConvertStub /* convert */ + ,JS_FinalizeStub /* finalize */ +}; + +#define TERM_PROP_FLAGS JSPROP_ENUMERATE|JSPROP_READONLY + +static struct JSPropertySpec js_terminal_properties[] = { +/* name ,tinyid ,flags ,getter, setter */ + + { "online" ,TERM_PROP_ONLINE ,TERM_PROP_FLAGS ,NULL,NULL}, + { "status" ,TERM_PROP_STATUS ,TERM_PROP_FLAGS ,NULL,NULL}, + { "console" ,TERM_PROP_CONSOLE ,TERM_PROP_FLAGS ,NULL,NULL}, + { "line_counter" ,TERM_PROP_LNCNTR ,TERM_PROP_FLAGS ,NULL,NULL}, + { "top_of_screen" ,TERM_PROP_TOS ,TERM_PROP_FLAGS ,NULL,NULL}, + { "rows" ,TERM_PROP_ROWS ,TERM_PROP_FLAGS ,NULL,NULL}, + { "autoterm" ,TERM_PROP_AUTOTERM ,TERM_PROP_FLAGS ,NULL,NULL}, + { "timeout" ,TERM_PROP_TIMEOUT ,TERM_PROP_FLAGS ,NULL,NULL}, + { "timeleft_warning" ,TERM_PROP_TIMELEFT_WARN,TERM_PROP_FLAGS ,NULL,NULL}, + {0} +}; + +JSObject* js_CreateTerminalObject(JSContext* cx, JSObject* parent) +{ + JSObject* termobj; + + termobj = JS_DefineObject(cx, parent, "terminal", &js_terminal_class, NULL, 0); + + if(termobj==NULL) + return(NULL); + + if(!JS_DefineProperties(cx, termobj, js_terminal_properties)) + return(NULL); + + return(termobj); +} + +#endif /* JAVSCRIPT */ \ No newline at end of file -- GitLab