From 0178043e56c04ef741cbb1cbbc3be3ab973d996c Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Mon, 3 Feb 2025 11:04:11 -0800 Subject: [PATCH] Correctly center lines of text that contain @-codes, after @center@ @-codes weren't expanded before the text length calculation, so the centering logic (offset in the user's terminal screen) would usually be incorrect as pointed out by Nelgin in #synchronet when we were discussing the |C @-code modifier (which is to center an @-code value in a field, not the screen). This issue was a known limitation of the fix to issue #418 (commit 8987150bd) but now that we have the expand_atcodes() function (hooray!), this is an easily solvable problem. Note: we're now calling center() withOUT the 'msg' parameter set to true, which means the @center@ code goes back to the previous (to issue #418 fix) behavior of just using bputs() for the centered text (we don't need the recursive call to pustmsg() to support @-codes any longer). This was the only reason that center() grew the optional 'msg' parameter so we likely can remove that option/feature at some date. --- src/sbbs3/putmsg.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/sbbs3/putmsg.cpp b/src/sbbs3/putmsg.cpp index 2016e08c1c..8ef4acaf0b 100644 --- a/src/sbbs3/putmsg.cpp +++ b/src/sbbs3/putmsg.cpp @@ -78,7 +78,9 @@ char sbbs_t::putmsg(const char *buf, int mode, int org_cols, JSObject* obj) // Print a message fragment, doesn't save/restore any console states (e.g. attributes, auto-pause) char sbbs_t::putmsgfrag(const char* buf, int& mode, int org_cols, JSObject* obj) { - char tmp2[256], tmp3[128]; + char tmp[256]; + char tmp2[256]; + char path[MAX_PATH + 1]; char* str = (char*)buf; uchar exatr = 0; char mark = '\0'; @@ -207,8 +209,8 @@ char sbbs_t::putmsgfrag(const char* buf, int& mode, int org_cols, JSObject* obj) if (i > 0) { tmp2[i] = 0; sys_status |= SS_NEST_PF; /* keep it only one message deep! */ - SAFEPRINTF2(tmp3, "%s%s", cfg.text_dir, tmp2); - printfile(tmp3, 0); + SAFEPRINTF2(path, "%s%s", cfg.text_dir, tmp2); + printfile(path, 0); sys_status &= ~SS_NEST_PF; } } @@ -409,11 +411,11 @@ char sbbs_t::putmsgfrag(const char* buf, int& mode, int org_cols, JSObject* obj) if (memcmp(str + l, "@CENTER@", 8) == 0) { l += 8; i = 0; - while (i < (int)sizeof(tmp2) - 1 && str[l] != 0 && str[l] != '\r' && str[l] != '\n') - tmp2[i++] = str[l++]; - tmp2[i] = 0; - truncsp(tmp2); - center(tmp2, /* msg: */ true); + while (i < (int)sizeof(tmp) - 1 && str[l] != 0 && str[l] != '\r' && str[l] != '\n') + tmp[i++] = str[l++]; + tmp[i] = 0; + truncsp(tmp); + center(expand_atcodes(tmp, tmp2, sizeof tmp2)); if (str[l] == '\r') l++; if (str[l] == '\n') -- GitLab