parent $misc
parent $has_verbs
object $public
var $root dbref 'public
var $root child_index 0
var $root fertile 1
var $root manager $public
var $root owned [$public]
var $root owners [$public]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1
var $public public []
var $has_verbs verbs #[["@public on %this is *", ['public_vrb, 'remote]]]
method init_public
.perms(caller(), $root);
public = ['readable];
.
method is_publicly
arg what;
return what in public;
.
method set_public
arg what;
var x, valid;
if (sender() != this())
.perms(sender(), 'manager);
if (type(what) == 'symbol) {
if (what in public)
return;
what = [@public, what];
}
if (type(what) != 'list)
throw(~type, toliteral(what) + " is an invalid type.");
public = what;
.
method public
return public;
.
method public_vrb
arg vrb, on, this, is, args;
var x, syn, p, who, opts;
.perms(sender(), 'manager);
syn = ((vrb + " on ") + this) + " <+/-[r|w]>";
who = sender();
if (!args)
$parse.tell_error(["Must specify either readable or writable.", ("Current Public permissions: " + ($list.to_english(public))) + "."], syn, who);
opts = #[["r", [1, 0]], ["w", [0, 0]]];
args = $parse.options(args, opts);
opts = args[2];
args = args[1];
if ((!((opt["r"])[1])) && ('readable in public))
.set_public(setremove(public, 'readable));
else if (((opt["r"])[1]) && (!('readable in public)))
.set_public(public + ['readable]);
if ((!((opt["w"])[1])) && ('writable in public))
.set_public(setremove(public, 'writable));
else if (((opt["w"])[1]) && (!('writable in public)))
.set_public(public + ['writable]);
sender().tell(("Public perms changed to: " + ($list.to_english(public))) + ".");
.