/
CDC-1.2b/
CDC-1.2b/src/
parent $mail_root
object $mail_utils

var $root child_index 0
var $root owners [$mail_utils]
var $root owned [$mail_utils]
var $root fertile 0
var $root inited 1
var $root manager $mail_utils
var $root writable [$mail_utils]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'mail_utils
var $mail_utils mail_system [$mail, $mail_list, $mail_ui, $mail_utils]

method mail_name
    arg obj;
    
    if (!(obj.has_ancestor($mail_list)))
        throw(~type, "Object is not a child of $mail_recipient");
    if (obj.has_ancestor($user))
        return strsub(obj.namef(), " ", "-");
    return "*" + strsub(obj.namef(), " ", "-");
.

method has_mail_perms
    arg [args];
    var obj;
    
    for obj in (args) {
        if ((!(obj in mail_system)) && (!($sys.is_system(obj))))
            return 0;
    }
.

method match_mail_recipient
    arg name;
    var mname, list;
    
    catch ~namenf, ~objnf {
        if ((name[1]) == "*") {
            list = "list";
            return $mail_db.find(substr(name, 2));
        } else {
            list = "user";
        }
        return sender().find_object(name, 'environment, 'user, 'grasp);
    } with handler {
        throw(~listnf, ((("No " + list) + " found by the name \"") + name) + "\".");
    }
.

method range_to_actual
    arg r, current;
    var start, end;
    
    if (type(r[1]) == 'symbol) {
        switch (r[1]) {
            case 'end:
                throw(~range, "Backwards range.");
            case 'start:
                start = 1;
            case 'current:
                start = (current['location]) in ((current['list]).mail());
        }
    } else {
        start = r[1];
    }
    if (type(r[2]) == 'symbol) {
        switch (r[2]) {
            case 'end:
                end = listlen((current['list]).mail());
            case 'single:
                end = start;
            case 'start:
                throw(~range, "Backwards range.");
            case 'current:
                end = (current['location]) in ((current['list]).mail());
        }
    } else {
        start = r[2];
    }
    if (start > end)
        throw(~range, "Backwards range.");
    return [start, end];
.