/
CDC-1.2b/
CDC-1.2b/src/
parent $foundation
object $messaged

var $root child_index 0
var $root owners [$messaged]
var $root owned [$messaged]
var $root fertile 1
var $root inited 1
var $root manager $messaged
var $root writable [$messaged]
var $root readable ['parameters, 'methods, 'code]
var $messaged messages 0
var $root info ["$messaged stores messages for various objects. For example, $exit messages such as would be displayed when a being attempts to travers an exit, but fails would be stored in a $messaged parameter, but could be overridden on a particular exit."]
var $root dbref 'messaged

method messages
    .perms(sender(), 'this);
    return messages || #[];
.

method all_messages
    var msgs, anc, all;
    
    // For message to call when inheriting, or something
    .perms(sender(), 'this);
    all = #[];
    for anc in (.ancestors()) {
        msgs = (| anc.messages() |);
        if (msgs)
            all = all.union(msgs);
        if (anc == definer())
            break;
    }
    return all;
.

method message
    arg id;
    var ret;
    
    // Don't check .all_messages, we should get rid of it.  Methods
    // calling .message should have their own defaults.
    // ret = (| (.all_messages())[id] |);
    return (| (.messages())[id] |) || 0;
.

method add_message
    arg id, msg;
    
    (> .perms(sender()) <);
    if (!messages)
        messages = #[];
    if (.has_message(id))
        throw(~msgexists, "Message already defined.");
    messages = dict_add(messages, id, msg);
.

method set_message
    arg id, msg;
    
    (> .perms(sender()) <);
    if (!messages)
        messages = #[];
    if (.defines_msg(id))
        messages = messages.replace(id, msg);
    else
        .add_message(id, msg);
.

method has_message
    arg id;
    
    return id in dict_keys(.all_messages());
.

method defines_msg
    arg id;
    
    return id in dict_keys(.messages());
.

method init_messaged
    .perms(caller(), $root);
    messages = #[];
.