[Turn on line numbering]
arg name, attr, value;
var branch, p, varkeys, sub, m, attrs;
if (!value)
value = ["general"];
attrs = defined_msgs[name];
for branch in (value) {
sub = explode(branch, ".");
if (listlen(sub) > 2)
throw(~msgbad, "Too many message branches '" + branch + "'.");
for p in (sub) {
if (p[1] == "(" || p == "*")
varkeys++;
else if (!$code_lib.valid_message_id(p))
throw(~msgbad, "Branch '" + p + "' contains invalid characters.");
}
}
if (varkeys) {
varkeys = #[];
for branch in (value) {
if ("(" in branch || "*" in branch) {
if ((m = regexp(branch, "\.\(([^)]+)\)$"))) {
sub = strsed(branch, "\.\(([^)]+)\)$", "");
value = replace(value, branch in value, sub + ".*");
varkeys = dict_add(varkeys, sub, m[1]);
} else if ((branch = strsed(branch, "\.\*$", ""))) {
varkeys = dict_add(varkeys, branch, "$" + branch);
} else {
throw(~msgbad, "Variable branch part must be last.");
}
}
}
attrs = dict_add(attrs, 'varkeys, varkeys);
} else if (dict_contains(attrs, 'varkeys)) {
attrs = dict_del(attrs, 'varkeys);
}
return [attrs, value];
// $#Edited: 09 Feb 98 01:28 $user_bruce
["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]