new object $mail_lib: $libraries, $mail_root; var $mail_lib mail_system = [$mail_message, $mail_list, $mail_ui, $mail_lib]; var $root created_on = 796268969; var $root flags = ['methods, 'code, 'core, 'variables]; var $root inited = 1; var $root managed = [$mail_lib]; var $root manager = $mail_lib; public method .has_mail_perms() { arg @args; var obj; for obj in (args) { if ((!(obj in mail_system)) && (!($sys.is_system(obj)))) return 0; } }; public method .indent_reply() { arg text; var l, out; out = []; for l in (text) { if (!(l.match_begin(">"))) out += l.wrap_lines(65, "> ", 1); else out += [">" + l]; } return out; }; public method .mail_name() { arg obj; var name; if (!(obj.has_ancestor($mail_list))) throw(~type, "Object is not a child of $mail_recipient"); name = (obj.name()).replace(" ", "-"); if (obj.has_ancestor($user)) return "~" + name; return "*" + name; }; public method .match_mail_recipient() { arg name; catch ~namenf { if (name) { if (name == "me") return sender(); if ((name[1]) == "*") return (> $mail_db.search(substr(name, 2)) <); if ((name[1]) == "~") return (> $user_db.search(substr(name, 2)) <); return (| $mail_db.search(name) |) || (> $user_db.search(name) <); } } throw(~listnf, ("No mail recipient found by the name \"" + name) + "\"."); }; public method .range_to_actual() { arg rng, current; var start, end, out, listm, m, x, list; list = current['list]; listm = list.mail(); if (type(rng[1]) == 'integer) { start = rng[1]; } else { switch (rng[1]) { case 'end: if (type(rng[2]) != 'symbol) throw(~range, "Backwards range."); start = ((current['list]).mail()).length(); case 'start: start = 1; case 'current: start = (current['location]) in listm; case 'specific: out = []; for m in ((rng[2]).explode_english_list()) { if ((!(x = toint(m))) || (x < 1)) { sender().tell(("Ignoring list range element '" + m) + "'."); } else { catch ~range out = setadd(out, (> listm[x] <)); with sender().tell(((((("List range #" + x) + " is higher than the messages in ") + (list.mail_name())) + " (") + (listm.length())) + ")"); } } return out || throw(~range, "No elements in list range."); } } if (type(rng[2]) == 'integer) { end = rng[2]; } else { switch (rng[2]) { case 'end: end = ((current['list]).mail()).length(); case 'single: end = start; case 'start: throw(~range, "Backwards range."); case 'current: end = (current['location]) in ((current['list]).mail()); } } if (start > end) throw(~range, "Backwards range."); out = []; for m in [start .. end] { catch ~range out = setadd(out, (> listm[m] <)); with sender().tell(((((("List range #" + m) + " is higher than the messages in ") + (list.mail_name())) + " (") + (listm.length())) + ")"); } return out || throw(~range, "No elements in list range."); };