Skip to content
Snippets Groups Projects
Commit 0178043e authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

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 8987150b)
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.
parent 8c2f53e4
Branches
No related tags found
No related merge requests found
Pipeline #8147 passed
......@@ -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')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment