From 97adde25f8497538e2b604dbb10f7672fffb9020 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Windows 11)" <rob@synchro.net>
Date: Fri, 12 Jan 2024 22:30:56 -0800
Subject: [PATCH] Allow @-codes in text.dat strings: NodeLoggedOnAtNbps and
 NodeLoggedOff

Note: format specifiers (e.g. %s) cannot be combined with @-codes (use one or
the other, not both).

Fixes issue #696

If you need additional text strings to support @-codes, you'll have to specify
them explicitly in feature request issues.
---
 src/sbbs3/logon.cpp  | 13 +++++++++----
 src/sbbs3/logout.cpp | 12 +++++++++---
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp
index 3c944fff48..c6f7c18407 100644
--- a/src/sbbs3/logon.cpp
+++ b/src/sbbs3/logon.cpp
@@ -554,10 +554,15 @@ bool sbbs_t::logon()
 			if(thisnode.status!=NODE_QUIET
 				&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
 				&& !(node.misc&NODE_AOFF) && node.useron!=useron.number) {
-				safe_snprintf(str, sizeof(str), text[NodeLoggedOnAtNbps]
-					,cfg.node_num
-					,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
-					,connection);
+				char fmt[256];
+				expand_atcodes(text[NodeLoggedOnAtNbps], fmt, sizeof fmt);
+				if(strcmp(text[NodeLoggedOnAtNbps], fmt) != 0)
+					SAFECOPY(str, fmt);
+				else
+					safe_snprintf(str, sizeof str, fmt
+						,cfg.node_num
+						,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
+						,connection);
 				putnmsg(i, str);
 			} 
 		}
diff --git a/src/sbbs3/logout.cpp b/src/sbbs3/logout.cpp
index c3de6296bf..d7cf3c56f7 100644
--- a/src/sbbs3/logout.cpp
+++ b/src/sbbs3/logout.cpp
@@ -66,9 +66,15 @@ void sbbs_t::logout()
 				getnodedat(i,&node,0);
 				if((node.status==NODE_INUSE || node.status==NODE_QUIET)
 					&& !(node.misc&NODE_AOFF) && node.useron!=useron.number) {
-					SAFEPRINTF2(str,text[NodeLoggedOff],cfg.node_num
-						,thisnode.misc&NODE_ANON
-						? text[UNKNOWN_USER] : useron.alias);
+					char fmt[256];
+					expand_atcodes(text[NodeLoggedOff], fmt, sizeof fmt);
+					if(strcmp(text[NodeLoggedOff], fmt) != 0)
+						SAFECOPY(str, fmt);
+					else
+						snprintf(str, sizeof str, fmt
+							,cfg.node_num
+							,thisnode.misc&NODE_ANON
+								? text[UNKNOWN_USER] : useron.alias);
 					putnmsg(i, str);
 				}
 			}
-- 
GitLab