From aa65e8fe4af2c354b0ad43365ef7b004d7315667 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 9 Jan 2003 00:16:22 +0000
Subject: [PATCH] Created bbs select_shell() and select_editor() methods.

---
 src/sbbs3/exec.cpp   | 47 ++++++++++++++++++++++++++++----------------
 src/sbbs3/js_bbs.cpp | 30 ++++++++++++++++++++++++++++
 src/sbbs3/sbbs.h     |  3 +++
 3 files changed, 63 insertions(+), 17 deletions(-)

diff --git a/src/sbbs3/exec.cpp b/src/sbbs3/exec.cpp
index 5daaabdfb4..806c497172 100644
--- a/src/sbbs3/exec.cpp
+++ b/src/sbbs3/exec.cpp
@@ -1698,14 +1698,7 @@ int sbbs_t::exec(csi_t *csi)
 			RESTORELINE;
 			return(0);
 		case CS_SELECT_SHELL:
-			csi->logic=LOGIC_TRUE;
-			for(i=0;i<cfg.total_shells;i++)
-				uselect(1,i,"Command Shell",cfg.shell[i]->name,cfg.shell[i]->ar);
-			if((i=uselect(0,useron.shell,0,0,0))>=0) {
-				useron.shell=i;
-				putuserrec(&cfg,useron.number,U_SHELL,8,cfg.shell[i]->code); }
-			else
-				csi->logic=LOGIC_FALSE;
+			csi->logic=select_shell() ? LOGIC_TRUE:LOGIC_FALSE;
 			return(0);
 		case CS_SET_SHELL:
 			csi->logic=LOGIC_TRUE;
@@ -1721,15 +1714,7 @@ int sbbs_t::exec(csi_t *csi)
 			return(0);
 
 		case CS_SELECT_EDITOR:
-			csi->logic=LOGIC_TRUE;
-			for(i=0;i<cfg.total_xedits;i++)
-				uselect(1,i,"External Editor",cfg.xedit[i]->name,cfg.xedit[i]->ar);
-			if(useron.xedit) useron.xedit--;
-			if((i=uselect(0,useron.xedit,0,0,0))>=0) {
-				useron.xedit=i+1;
-				putuserrec(&cfg,useron.number,U_XEDIT,8,cfg.xedit[i]->code); }
-			else
-				csi->logic=LOGIC_FALSE;
+			csi->logic=select_editor() ? LOGIC_TRUE:LOGIC_FALSE;
 			return(0);
 		case CS_SET_EDITOR:
 			csi->logic=LOGIC_TRUE;
@@ -1832,3 +1817,31 @@ int sbbs_t::exec(csi_t *csi)
 			return(0); }
 }
 
+bool sbbs_t::select_shell(void)
+{
+	int i;
+
+	for(i=0;i<cfg.total_shells;i++)
+		uselect(1,i,"Command Shell",cfg.shell[i]->name,cfg.shell[i]->ar);
+	if((i=uselect(0,useron.shell,0,0,0))>=0) {
+		useron.shell=i;
+		putuserrec(&cfg,useron.number,U_SHELL,8,cfg.shell[i]->code); 
+		return(true); 
+	}
+	return(false);
+}
+
+bool sbbs_t::select_editor(void)
+{
+	int i;
+
+	for(i=0;i<cfg.total_xedits;i++)
+		uselect(1,i,"External Editor",cfg.xedit[i]->name,cfg.xedit[i]->ar);
+	if(useron.xedit) useron.xedit--;
+	if((i=uselect(0,useron.xedit,0,0,0))>=0) {
+		useron.xedit=i+1;
+		putuserrec(&cfg,useron.number,U_XEDIT,8,cfg.xedit[i]->code); 
+		return(true);
+	}
+	return(false);
+}
\ No newline at end of file
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index cb651803c0..83fee562d6 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -2437,6 +2437,30 @@ js_getnstime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	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);
+
+	*rval = BOOLEAN_TO_JSVAL(sbbs->select_shell());
+	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);
+
+	*rval = BOOLEAN_TO_JSVAL(sbbs->select_editor());
+	return(JS_TRUE);
+}
+
 static jsMethodSpec js_bbs_functions[] = {
 	{"atcode",			js_atcode,			1,	JSTYPE_STRING,	JSDOCSTR("string code")
 	,JSDOCSTR("return @-code value")
@@ -2676,6 +2700,12 @@ static jsMethodSpec js_bbs_functions[] = {
 	{"get_newscantime",	js_getnstime,		1,	JSTYPE_NUMBER,	JSDOCSTR("number time")
 	,JSDOCSTR("get newscan time, returns new newscan time value (time_t)")
 	},		
+	{"select_shell",	js_select_shell,	0,	JSTYPE_BOOLEAN,	""
+	,JSDOCSTR("allows user to select a new command shell")
+	},
+	{"select_editor",	js_select_editor,	0,	JSTYPE_BOOLEAN,	""
+	,JSDOCSTR("allows user to select a new external message editor")
+	},
 	{0}
 };
 
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 9dddb88463..9295f66502 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -361,6 +361,9 @@ public:
 	bool	ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool dir=false);
 	SOCKET	ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN*);
 
+	bool	select_shell(void);
+	bool	select_editor(void);
+
 	void	sys_info(void);
 	void	user_info(void);
 	void	xfer_policy(void);
-- 
GitLab