From: Tangles Date: Thu, 13 Feb 2020 12:53:21 +0000 (+1100) Subject: userpref - add opton to just get the first character when expanding prefs. X-Git-Tag: v1.6.1-roc-dev~27 X-Git-Url: https://skyeroc.xyz/gitweb/?a=commitdiff_plain;h=1a78b1b23814ec39ded2cf4aff4eda2aebf5f593;p=dgamelaunch userpref - add opton to just get the first character when expanding prefs. $0{variable:default} --- diff --git a/dgamelaunch.c b/dgamelaunch.c index 94cf4b9..e850674 100644 --- a/dgamelaunch.c +++ b/dgamelaunch.c @@ -406,17 +406,22 @@ bannerstr_substprefs(char *buf, char *bufnew, int buflen) char *fallback = NULL; char *gpr = NULL; int isdollar = 0; + int firstchar = 0; if (!src) return NULL; while (*src && dst < bufnew + buflen - 1) { if (*src == '$') { isdollar = 1; } else if (isdollar) { - isdollar = 0; - if (*src == '{') - varname = src + 1; - else { - *dst++ = '$'; - *dst++ = *src; + if (*src == '0') { + firstchar = 1; + } else { + isdollar = 0; + if (*src == '{') { + varname = src + 1; + } else { + *dst++ = '$'; + *dst++ = *src; + } } } else if (varname || fallback) { if (*src == ':') { @@ -424,11 +429,13 @@ bannerstr_substprefs(char *buf, char *bufnew, int buflen) fallback = src + 1; } else if (*src == '}') { *src = '\0'; - snprintf(dst, bufnew + buflen - dst - 1, "%s", gpr = getpref(varname, fallback)); - if (gpr) { - free(gpr); - gpr = NULL; - } + gpr = getpref(varname, fallback); + if (firstchar) { + firstchar = 0; + snprintf(dst, bufnew + buflen - dst - 1, "%c", gpr[0]); + } else + snprintf(dst, bufnew + buflen - dst - 1, "%s", gpr); + if (gpr) free(gpr); for (; *dst; dst++); fallback = varname = NULL; } diff --git a/dgl-common.c b/dgl-common.c index 868ade2..1f43fd5 100644 --- a/dgl-common.c +++ b/dgl-common.c @@ -134,6 +134,8 @@ dgl_format_str(int game, struct dg_user *me, char *str, char *plrname) int ispercent = 0; int isbackslash = 0; int isdollar = 0; + int firstchar = 0; /* special case for returning + only the first char of a userpref */ if (!str) return NULL; @@ -150,7 +152,12 @@ dgl_format_str(int game, struct dg_user *me, char *str, char *plrname) } if (*f == '}') { *f = '\0'; - snprintf(p, end + 1 - p, "%s", gpr = getpref(varname, fallback)); + gpr = getpref(varname, fallback); + if (firstchar) { + snprintf(p, end + 1 - p, "%c", gpr[0]); + firstchar = 0; + } else + snprintf(p, end + 1 - p, "%s", gpr); if (gpr) free(gpr); for (; *p; p++); varname = fallback = NULL; @@ -254,6 +261,8 @@ dgl_format_str(int game, struct dg_user *me, char *str, char *plrname) varname = f+1; fallback = NULL; isdollar = 0; + } else if (isdollar && *f == '0') { + firstchar = 1; /* don't reset isdollar here */ } else if (*f == '$') { isdollar = 1; } else {