From 961f1f58aaae29c57c0177673ae2b9ef4bdd6313 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Tue, 5 Jul 2022 15:25:02 -0700
Subject: [PATCH] Support @-codes in text centered with the CENTER @-code

Note: this centering logic does not know the expanded-size of the @-code, so use a fixed-length @-code (e.g. with padding) or use the 'C' @-code format modifier instead.

Fix issue #418
---
 src/sbbs3/con_out.cpp | 7 +++++--
 src/sbbs3/putmsg.cpp  | 2 +-
 src/sbbs3/sbbs.h      | 2 +-
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/sbbs3/con_out.cpp b/src/sbbs3/con_out.cpp
index 292dc00dbe..1045d22176 100644
--- a/src/sbbs3/con_out.cpp
+++ b/src/sbbs3/con_out.cpp
@@ -775,7 +775,7 @@ void sbbs_t::inc_row(int count)
 	}
 }
 
-void sbbs_t::center(const char *instr, unsigned int columns)
+void sbbs_t::center(const char *instr, bool msg, unsigned int columns)
 {
 	char str[256];
 	size_t len;
@@ -789,7 +789,10 @@ void sbbs_t::center(const char *instr, unsigned int columns)
 	carriage_return();
 	if(len < columns)
 		cursor_right((columns - len) / 2);
-	bputs(str);
+	if(msg)
+		putmsg(str, P_NONE);
+	else
+		bputs(str);
 	newline();
 }
 
diff --git a/src/sbbs3/putmsg.cpp b/src/sbbs3/putmsg.cpp
index f834b9ca0f..f50be4a478 100644
--- a/src/sbbs3/putmsg.cpp
+++ b/src/sbbs3/putmsg.cpp
@@ -421,7 +421,7 @@ char sbbs_t::putmsgfrag(const char* buf, long& mode, long org_cols, JSObject* ob
 						tmp2[i++] = str[l++];
 					tmp2[i] = 0;
 					truncsp(tmp2);
-					center(tmp2);
+					center(tmp2, /* msg: */true);
 					if(str[l] == '\r')
 						l++;
 					if(str[l] == '\n')
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 642ae05219..35ca5461d1 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -825,7 +825,7 @@ public:
 	int		outchar(enum unicode_codepoint, const char* cp437_fallback = NULL);
 	void	inc_row(int count);
 	void	inc_column(int count);
-	void	center(const char *str, unsigned int columns = 0);
+	void	center(const char *str, bool msg = false, unsigned int columns = 0);
 	void	wide(const char*);
 	void	clearscreen(long term);
 	void	clearline(void);
-- 
GitLab