From 1ea093ded702fc1c800b54fbf97c8f2e8c94f620 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Windows)" <rob@synchro.net>
Date: Tue, 23 May 2023 18:43:11 -0700
Subject: [PATCH] Add new global method: strip_ctrl_a() - remove Ctrl-A
 sequences from string

Unlike strip_ctrl(), does not remove any other control characters from string.
---
 src/sbbs3/js_global.c | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index f0a879ff06..12c77126a1 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -1102,6 +1102,40 @@ js_strip_ctrl(JSContext *cx, uintN argc, jsval *arglist)
 	return(JS_TRUE);
 }
 
+static JSBool
+js_strip_ctrl_a(JSContext *cx, uintN argc, jsval *arglist)
+{
+	jsval *argv=JS_ARGV(cx, arglist);
+	char*		buf = NULL;
+	JSString*	js_str;
+	jsrefcount	rc;
+
+	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
+
+	if(!js_argc(cx, argc, 1))
+		return JS_FALSE;
+
+	if(JSVAL_NULL_OR_VOID(argv[0]))
+		return JS_TRUE;
+
+	JSVALUE_TO_MSTRING(cx, argv[0], buf, NULL);
+	HANDLE_PENDING(cx, buf);
+	if(buf == NULL)
+		return JS_TRUE;
+
+	rc=JS_SUSPENDREQUEST(cx);
+	remove_ctrl_a(buf, buf);
+	JS_RESUMEREQUEST(cx, rc);
+
+	js_str = JS_NewStringCopyZ(cx, buf);
+	free(buf);
+	if(js_str == NULL)
+		return JS_FALSE;
+
+	JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(js_str));
+	return JS_TRUE;
+}
+
 static JSBool
 js_strip_ansi(JSContext *cx, uintN argc, jsval *arglist)
 {
@@ -4862,9 +4896,13 @@ static jsSyncMethodSpec js_global_functions[] = {
 	,310
 	},		
 	{"strip_ctrl",		js_strip_ctrl,		1,	JSTYPE_STRING,	JSDOCSTR("text")
-	,JSDOCSTR("Strip control characters from string, returns modified string")
+	,JSDOCSTR("Strip all control characters and Ctrl-A (attribute) sequences from string, returns modified string")
 	,310
 	},		
+	{"strip_ctrl_a",	js_strip_ctrl_a,	1,	JSTYPE_STRING,	JSDOCSTR("text")
+	,JSDOCSTR("Strip all Ctrl-A (attribute) sequences from string, returns modified string")
+	,320
+	},
 	{"strip_ansi",		js_strip_ansi,		1,	JSTYPE_STRING,	JSDOCSTR("text")
 	,JSDOCSTR("Strip all ANSI terminal control sequences from string, returns modified string")
 	,31802
-- 
GitLab