if (!src) return NULL;
while (*src && dst < bufnew + buflen - 1) {
if (varname || fallback) {
- if (*src == ':' && !nest) {
+ if (*src == ':' && nest == 1) {
*src = '\0';
fallback = src + 1;
} else if (*src == '{') {
while (*f) {
if (varname || fallback) {
- if (*f == ':' && !nest) {
+ if (*f == ':' && nest == 1) {
fallback = f+1;
*f = '\0';
} else if (*f == '{') {
} else if (*f == '}' && !(--nest)) {
*f = '\0';
gpr = getpref(varname, fallback);
+ *f = '}'; /* put back how we found it */
+ if (fallback) *(fallback-1) = ':';
if (firstchar) {
snprintf(p, end + 1 - p, "%c", gpr[0]);
firstchar = 0;
} else if (*f == '\\') {
isbackslash = 1;
} else if (isdollar && *f == '{') {
+ nest++;
varname = f+1;
fallback = NULL;
isdollar = 0;
int myargc = 0;
char *words[32]; /* max args - this is arbitrary */
char **myargv; /* allocate these when we know how many */
- char *p;
+ char *p;
int isspace = 1;
int i;
- for (p = tmp->param2; *p; p++) {
+ char *p2_unformat = strdup(tmp->param2);
+ for (p = p2_unformat; *p; p++) {
if (*p == ' ') {
isspace++;
*p = 0;
myargv[i] = dgl_format_str(game, me, words[i-1], playername);
}
myargv[i] = 0;
+ free(p2_unformat);
clear();
refresh();