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 ((!((opts["r"])[1])) && ('readable in public)) .set_public(setremove(public, 'readable)); else if (((opts["r"])[1]) && (!('readable in public))) .set_public(public + ['readable]); if ((!((opts["w"])[1])) && ('writable in public)) .set_public(setremove(public, 'writable)); else if (((opts["w"])[1]) && (!('writable in public))) .set_public(public + ['writable]); sender().tell(("Public perms changed to: " + ($list.to_english(public))) + "."); .