]> skyeroc.xyz Git - dgamelaunch/commitdiff
userpref - add opton to just get the first character when expanding prefs.
authorTangles <andyrthomson@gmail.com>
Thu, 13 Feb 2020 12:53:21 +0000 (23:53 +1100)
committerTangles <andyrthomson@gmail.com>
Thu, 13 Feb 2020 12:53:21 +0000 (23:53 +1100)
$0{variable:default}

dgamelaunch.c
dgl-common.c

index 94cf4b9d32bdbceaff9d0829cd15491b7f8e4f6e..e850674f26513f442d40e8ef7d6a016357d08974 100644 (file)
@@ -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;
             }
index 868ade23db3251afdfe228bcd76d6699169999d1..1f43fd545eec4fdc80678d26391d2c0d56f977af 100644 (file)
@@ -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 {