Method code for $builder.define_msg_cmd()

[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"]

the Cold Dark