/
CDC-1.2b/
CDC-1.2b/src/
parent $user_interfaces
object $messages_ui

var $root dbref 'messages_ui
var $root child_index 0
var $root fertile 1
var $root manager $messages_ui
var $root owned [$messages_ui]
var $root owners [$]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $old_command_environment verb_cache #[]
var $old_command_environment command_cache [["@mesg *", 'mesg_cmd]]
var $old_command_environment shortcuts_cache []
var $has_commands commands [["@mesg *", 'mesg_cmd]]
var $has_commands shortcuts []
var $root inited 1

method mesg_cmd
    arg com, args;
    var style, pos, mesg, obj, name, definer, matches, m, o, n, output, m, me;
    
    pos = " is " in args;
    if (pos) {
        style = 'set;
        mesg = substr(args, pos + 4);
        args = substr(args, 1, pos - 1);
    } else {
        style = 'get;
        mesg = "";
    }
    pos = "on " in args;
    if (pos) {
        obj = .match_env_nice(substr(args, pos + 3));
        args = substr(args, 1, pos - 1);
    } else {
        obj = this();
    }
    if (!(obj.has_ancestor($has_messages))) {
        .tell((obj.dbref()) + " does not have messages.");
        return;
    }
    pos = ":" in args;
    if (pos) {
        definer = .match_env_nice(substr(args, pos - 1));
        name = substr(args, pos + 1);
    } else {
        name = args;
    }
    if (style == 'set) {
        obj.set_message_part(name, definer, mesg);
    } else {
        output = .parse_messages(obj.messages(), name);
        .tell(output);
        return;
    }
.

method parse_messages
    arg message, [mask];
    var output, definer, m, p, s;
    
    output = [];
    mask = [@mask, ""][1];
    for definer in (dict_keys(message)) {
        output = [@output, (((definer.name()) + " (") + (definer.dbref())) + "):"];
        for m in (dict_keys(message[definer])) {
            //          .debug(.message(m, definer));
            p = (.message(m, definer)).uncompile();
            if (type(p) == 'dictionary) {
                for s in (dict_keys(p)) {
                    if (match_begin((m + ".") + s, mask))
                        output = [@output, [((("  " + m) + ".") + s) + ": "].join(p[s])];
                }
            } else if (match_begin(m, mask)) {
                output = [@output, [("  " + m) + ":  "].join(p)];
            }
        }
    }
    return output;
.