[Turn on line numbering]
arg cmdstr, cmd, args;
var what, opts, def, o, i, br, ref, compiler, eval, getter;
(> .perms(caller(), 'command) <);
[args, opts] = (> $parse_lib.opt(args, "b?ranches", "c?ompiler", "e?valuator", "g?etter") <);
args = join(args);
what = split(args, " *: *");
if (listlen(what) != 2)
return "Invalid message reference " + args;
[def, what] = what;
what = what.trim();
if (match_regexp(what, "[=.]"))
return "You cannot set the default with " + cmd + ".";
def = (> .match_env_nice(def) <);
if (!def.is_writable_by(this()))
return "You cannot define messages on " + def.namef('ref) + ".";
if (type(def) == 'frob)
return "You cannot define messages on a frob.";
catch any {
(> def.define_msg(what) <);
ref = def + ":" + what;
.tell("Message " + ref + " defined.");
} with {
return traceback()[1][2];
}
o = opts.slice(1);
if ((i = "b?ranches" in o)) {
br = opts[i][4].trim().split(" *, *");
catch any {
def.set_msg_attr(what, 'branches, br);
.tell("Message branches defined:");
for i in (br)
.tell(" " + ref + "." + i);
} with {
.tell(traceback()[1][2]);
}
}
if ((i = "e?valuator" in o)) {
eval = opts[i][4];
if (!eval) {
.tell("No evaluator specified with +evaluator=??");
} else {
eval = (> .match_env_nice(eval) <);
if (!eval.is($evaluator))
return "Invalid evaluator object: " + evaluator;
catch any {
def.set_msg_attr(what, 'evaluator, eval);
.tell("Set evaluator for " + ref + " to " + eval);
} with {
.tell(traceback()[1][2]);
}
}
}
if ((i = "c?ompiler" in o)) {
compiler = opts[i][4];
if (!compiler) {
.tell("No compiler specified with +compiler=??");
} else {
compiler = (> .match_env_nice(compiler) <);
if (!compiler.is($compiler))
.tell("Invalid compiler object: " + compiler);
catch any {
def.set_msg_attr(what, 'compiler, compiler);
.tell("Set compiler for " + ref + " to " + compiler);
} with {
.tell(traceback()[1][2]);
}
}
}
if ((i = "g?etter" in o)) {
getter = opts[i][4];
if (!getter) {
.tell("No getter specified with +getter=??");
} else {
getter = (> tosym(getter) <);
catch any {
def.set_msg_attr(what, 'getter, getter);
.tell("Set getter for " + ref + " to " + getter);
} with {
.tell(traceback()[1][2]);
}
}
}
// $#Edited: 07 Apr 97 09:54 $miro
["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]