From e5eca8bc43ad91d3a5ab0debee5515cf055efb1e Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Mon, 12 Aug 2024 19:01:36 -0700
Subject: [PATCH] Add support for -v (verbose) option and modopts.ini

Don't display remote host name/addr unless -v option is specified or
verbosity=1 is set in modopts.ini.

Allow the displayed messages to be customized or disabled as the sysop wishes
via modopts.ini keys:
- help_msg
- connecting_msg
- failed_connect_msg
(e.g. set to a blank string to disable)

The following settings are also now configurable via modopts.ini:
- quiet (correlates with -q option)
- pause (correlates with -P option)
- clear (correlates with -C option)
- timeout (correlates with -T option)
- verbosity (correlates with -v option)

... a sysop can control the default behavior of all invocations of telgate.js
or rlogin.js via a single file now (modopts.ini).

The rlogin.js module will first look ing for the [rlogin] section in
modopts.ini and if it doesn't exist, then [telgate] section. telgate.js just
looks for the [telgate] section.

For the #synchronet irc crew: Nelgin and Keyop
---
 exec/rlogin.js  | 25 ++++++++++++++++++-------
 exec/telgate.js | 23 ++++++++++++++++-------
 2 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/exec/rlogin.js b/exec/rlogin.js
index 5593b57a90..c7bcb05b9b 100644
--- a/exec/rlogin.js
+++ b/exec/rlogin.js
@@ -9,6 +9,7 @@
 //   -m <telnet-gateway-mode> (Number or TG_* vars OR'd together, default: 0)
 //   -p send current user alias and password as server and client-name values
 //   -q don't display banner or pause prompt (quiet)
+//   -v increase verbosity (display remote host name/address/port in messages)
 //   -P don't pause for user key-press
 //   -C don't clear screen after successful session
 
@@ -21,15 +22,21 @@
 
 require("sbbsdefs.js", 'TG_RLOGINSWAP');
 
-var quiet = false;
-var pause = true;
-var clear = true;
 var mode;
 var addr;
 var client_name;
 var server_name;
 var term_type;
-var timeout = 10;
+var options;
+if((options = load({}, "modopts.js","rlogin")) == null) {
+	if((options = load({}, "modopts.js","telgate")) == null)
+		options = {};
+}
+var quiet = options.quiet === undefined ? false : options.quiet;
+var pause = options.pause === undefined ? true : options.pause;
+var clear = options.clear === undefined ? true : options.clear;
+var timeout = options.timeout === undefined ? 10 : options.timeout;
+var verbosity = options.verbosity === undefined ? 0 : options.verbosity;
 
 for(var i = 0; i < argv.length; i++) {
 	var arg = argv[i];
@@ -60,6 +67,9 @@ for(var i = 0; i < argv.length; i++) {
 		case 'C':
 			clear = false;
 			break;
+		case 'v':
+			++verbosity;
+			break;
 		case 'p': // send alias and password as expected by Synchronet
 			client_name = user.security.password;
 			server_name = user.alias;
@@ -91,11 +101,12 @@ if(!addr) {
 	alert(js.exec_file + ": No destination address specified");
 	exit(1);
 }
+var remote_host = (verbosity > 0 ? addr : "remote host");
 if(!quiet) {
-	write("\r\n\x01h\x01hPress \x01yCtrl-]\x01w for a control menu anytime.\r\n\r\n");
+	write(options.help_msg || "\r\n\x01h\x01hPress \x01yCtrl-]\x01w for a control menu anytime.\r\n\r\n");
 	if(pause)
 		console.pause();
-	writeln("\x01h\x01yConnecting to: \x01w" + addr + "\x01n");
+	write(format(options.connecting_msg || "\x01h\x01yConnecting to \x01w%s \x01n...\r\n", remote_host));
 }
 mode = eval(mode);
 var result = bbs.rlogin_gate(
@@ -107,6 +118,6 @@ var result = bbs.rlogin_gate(
 	,timeout
 	);
 if(result === false)
-	alert(js.exec_file + ": Failed to connect to: " + addr);
+	alert(options.failed_connect_msg || (js.exec_file + ": Failed to connect to " + remote_host));
 else if(clear)
 	console.clear();
diff --git a/exec/telgate.js b/exec/telgate.js
index da83b70393..909133652a 100644
--- a/exec/telgate.js
+++ b/exec/telgate.js
@@ -7,6 +7,7 @@
 //   -T <connect-timeout-seconds> (default: 10 seconds)
 //   -m <telnet-gateway-mode> (Number or TG_* vars OR'd together, default: 0)
 //   -q don't display banner or pause prompt (quiet)
+//   -v increase verbosity (display remote host name/address/port in messages)
 //   -P don't pause for user key-press
 //   -C don't clear screen after successful session
 //   -s <string-to-send after connect> (multiple may be specified)
@@ -21,13 +22,17 @@ load("sbbsdefs.js");
 
 "use strict";
 
-var quiet = false;
-var pause = true;
-var clear = true;
 var mode = 0;
 var addr;
-var timeout = 10;
 var send = [];
+var options;
+if((options = load({}, "modopts.js","telgate")) == null)
+	options = {};
+var quiet = options.quiet === undefined ? false : options.quiet;
+var pause = options.pause === undefined ? true : options.pause;
+var clear = options.clear === undefined ? true : options.clear;
+var timeout = options.timeout === undefined ? 10 : options.timeout;
+var verbosity = options.verbosity === undefined ? 0 : options.verbosity;
 
 for(var i = 0; i < argv.length; i++) {
 	var arg = argv[i];
@@ -52,6 +57,9 @@ for(var i = 0; i < argv.length; i++) {
 		case 'C':
 			clear = false;
 			continue;
+		case 'v':
+			++verbosity;
+			break;
 	}
 	var value = arg.length > 2 ? arg.substring(2) : argv[++i];
 	switch(arg[1]) { // value options
@@ -76,15 +84,16 @@ if(!addr) {
 	alert(js.exec_file + ": No destination address specified");
 	exit(1);
 }
+var remote_host = (verbosity > 0 ? addr : "remote host");
 if(!quiet) {
-	write("\r\n\x01h\x01hPress \x01yCtrl-]\x01w for a control menu anytime.\r\n\r\n");
+	write(options.help_msg || "\r\n\x01h\x01hPress \x01yCtrl-]\x01w for a control menu anytime.\r\n\r\n");
 	if(pause)
 		console.pause();
-	writeln("\x01h\x01yConnecting to: \x01w" + addr + "\x01n");
+	write(format(options.connecting_msg || "\x01h\x01yConnecting to \x01w%s \x01n...\r\n", remote_host));
 }
 
 var result = bbs.telnet_gate(addr, mode, timeout, send);
 if(result === false)
-	alert(js.exec_file + ": Failed to connect to: " + addr);
+	alert(options.failed_connect_msg || (js.exec_file + ": Failed to connect to " + remote_host));
 else if(clear)
 	console.clear();
-- 
GitLab