/
CDC-1.1/
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 msg, all;
    
    // For message to call when inheriting, or something
    .perms(sender(), 'this);
    all = (| pass() |) || #[];
    for msg in (.messages()) {
        if (msg in dict_keys(all))
            all = $dict.replace(all, msg, (.messages())[msg]);
        else
            all = dict_add(all, msg, (.messages())[msg]);
    }
    return all;
.

method message
    arg id;
    var ret;
    
    ret = (| (.all_messages())[id] |);
    if (type(ret) == 'error)
        throw(~msgnf, "Message not found.");
    return ret;
.

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

method set_message
    arg id, msg;
    
    .perms(sender());
    if (.defines_msg(id))
        messages = $dict.replace(messages, 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 = #[];
.