From 24d9db2d47c4efeca1024da73e6b8c7c18f6ed38 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Sat, 16 Sep 2023 14:29:33 -0700
Subject: [PATCH] Load lib to return descriptive strings for terminal
 parameters

Much of the logic ported from sbbs_t methods in con_out.cpp

For Nelgin's default_settings.js project
---
 exec/load/termdesc.js | 84 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)
 create mode 100755 exec/load/termdesc.js

diff --git a/exec/load/termdesc.js b/exec/load/termdesc.js
new file mode 100755
index 0000000000..d12d89e8ed
--- /dev/null
+++ b/exec/load/termdesc.js
@@ -0,0 +1,84 @@
+// Terminal type/parameters (set or detected) descriptive strings
+
+// Common function arguments:
+//      verbose: true if you want verbose output (default to false)
+//      usr: Pass a User object (defaults to current 'user')
+
+// e.g. load("termdesc.js".type()
+//      load("termdesc.js".charset()
+//      load("termdesc.js".rows()
+//      load("termdesc.js".columns()
+//      load("termdesc.js".type(true)
+//      load("termdesc.js".type(true, User(4))
+
+require("text.js", "TerminalAutoDetect");
+require("userdefs.js", "USER_PETSCII");
+
+"use strict";
+
+function charset(term)
+{
+	if(term === undefined)
+		term = console.term_supports();
+	if(term & USER_PETSCII)
+		return "CBM-ASCII";
+	if(term & USER_UTF8)
+		return "UTF-8";
+	if(term & USER_NO_EXASCII)
+		return "US-ASCII";
+	return "CP437";
+}
+
+function rows(verbose, usr)
+{
+	if(usr === undefined) // Use current user by default
+		usr = user;
+	var rows = usr.screen_rows || console.screen_rows;
+	if(verbose !== true)
+		return String(rows);
+	return format("%s%d %s", usr.screen_rows ? "":bbs.text(TerminalAutoDetect), rows, bbs.text(TerminalRows));
+}
+
+function columns(verbose, usr)
+{
+	if(usr === undefined) // Use current user by default
+		usr = user;
+	var cols = usr.screen_columns || console.screen_columns;
+	if(verbose !== true)
+		return String(cols);
+	return format("%s%d %s", usr.screen_columns ? "":bbs.text(TerminalAutoDetect), cols, bbs.text(TerminalColumns));
+}
+
+function type(verbose, usr)
+{
+	var term;
+	
+	if(usr === undefined) { // Use current user by default
+		usr = user;
+		term = console.term_supports(); // user current-detected terminal params
+	} else
+		term = usr.settings;
+
+	var type = "DUMB";
+	if(term & USER_PETSCII)
+		type = "PETSCII";
+	if(term & USER_RIP)
+		type = "RIP";
+	if(term & USER_ANSI)
+		type = "ANSI";
+	if(verbose !== true)
+		return type;
+	
+	// Verbose
+	if(term & USER_PETSCII)
+		return ((usr.settings & USER_AUTOTERM) ? bbs.text(TerminalAutoDetect) : "") + "CBM/PETSCII";
+	return format("%s%s / %s %s%s%s"
+		,(usr.settings & USER_AUTOTERM) ? bbs.text(TerminalAutoDetect) : ""
+		,this.charset(term)
+		,type
+		,(term & USER_COLOR) ? (term & USER_ICE_COLOR ? bbs.text(TerminalIceColor) : bbs.text(TerminalColor)) : bbs.text(TerminalMonochrome)
+		,(term & USER_MOUSE) ? bbs.text(TerminalMouse) : ""
+		,(term & USER_SWAP_DELETE) ? "DEL=BS" : "").trimRight();
+}
+
+this;
-- 
GitLab