/
upgradedb-3.0a10/
upgradedb-3.0a10/files/
upgradedb-3.0a10/scripts/
diff -rwu ColdCore-3.0a9.02/src/+CORE ColdCore-3.0a10/src/+CORE
--- ColdCore-3.0a9.02/src/+CORE	Sat Mar 14 15:53:55 1998
+++ ColdCore-3.0a10/src/+CORE	Sat Mar 14 15:49:26 1998
@@ -25,12 +25,7 @@
 mail_lib
 foundation
 has_commands
-command_cache
-network
-frob
-connection_interface
 has_name
-bug_handler
 described
 event_handler
 utilities
@@ -47,6 +42,8 @@
 plain_format
 wrapped_format
 flat_format
+tagged_format
+tkmoo_format
 ansi_format
 html_format
 pueblo_format
@@ -80,14 +77,16 @@
 page_web_prefs
 mail_message
 itext
+command_cache
+remote_cache
+user_interfaces
+mail_list
+mail_ui
 location
 located_location
 body
 has_reactions
 robot
-mail_list
-user_interfaces
-mail_ui
 command_aliases
 bad_commands
 help_ui
@@ -95,6 +94,7 @@
 channel_ui
 user_info
 menu
+www_preferences
 user
 guest
 reaper
@@ -105,17 +105,10 @@
 dmi_data_ui
 programmer
 admin
-antisocial
-social
-www_preferences
-settings_ui
-mail_list_news
-mail_list_bugs
-mail_postmaster
-mail_admin
 on_location
 in_location
 lost_and_found
+introtut_mailbox
 trash
 realm_settings
 place
@@ -123,27 +116,115 @@
 body_cave
 void
 the_pit
+tutorial
+introductory_tutorial
+introtut_speaking
+introtut_nonverbal
+introtut_remote
+introtut_who
+introtut_look
+introtut_desc
+introtut_gender
+introtut_start
+introtut_help
+introtut_lines
+introtut_end
+introtut_objs
+introtut_env
+introtut_moving
+introtut_help_short
+introtut_help_nav
+introtut_objs_env
+introtut_names
+introtut_names_tmpl
+introtut_names_user
+introtut_moving_1
+introtut_moving_2
+introtut_communication
 realm
 realm_of_creation
+tutorial_realm
+mail_list_news
+mail_list_bugs
+mail_postmaster
+mail_admin
+antisocial
+social
+settings_ui
+network
+connection
+outbound_connection
+ident_connection
+inbound_connection
+http_connection
+smtp_connection
+login_connection
+pop3_connection
+smtp
+daemon
+login_daemon
+smtp_daemon
+http_daemon
+pop3_daemon
+dns
+frob
 thing_frob
 wearable_frob
 exit
 coord_exit
 exit_frob
+logic_frob
+xor
+and
+and_lock_frob
+lock_frob
+object_lock_frob
+inside_lock_frob
+indirect_lock_frob
+owner_lock_frob
+carry_lock_frob
+parent_lock_frob
+not
+not_lock_frob
+or
+or_lock_frob
+true
+true_lock_frob
+false
+false_lock_frob
+read_parser
+callback
+message_frob
+trie
+ctext_frob
+tag
+format
+generator
+climate_frob
+rect
+rtree
+propagator
+connection_interface
+login_interface
+http_interface
+pop3_interface
+smtp_interface
 slate
 nothing
+introtut_user_graffiti
+introtut_leaflet
+path
 weather_system
 climate
-climate_taobh_thiar
+climate_creation
 weather_attributes
 weather
-weather_1
-weather_2
-weather_3
-weather_4
-weather_5
-weather_6
-smtp_interface
+weather_nice
+weather_hot
+weather_windy
+weather_stormy
+weather_rainy
+weather_snowy
 help_node
 db
 registry
@@ -194,6 +275,7 @@
 help_places_paths
 help_places_env
 help_build_cmds
+help_building_commands
 help_prog
 help_prog_commands
 help_coldc
@@ -320,6 +402,7 @@
 help_func_shutdown
 help_func_anticipate_assignment
 help_func_config
+help_func_cache_info
 help_funcs_task
 help_func_atomic
 help_func_caller
@@ -457,6 +540,10 @@
 help_reference
 help_updates
 help_admin
+help_admin_commands
+help_administrators
+help_credit
+help_copyright
 help_core
 help_cmds
 help_cmd_say
@@ -516,13 +603,22 @@
 help_cmd_move
 help_cmd_chparent
 help_cmd_addparent
+help_cmd_addshortcut
 help_cmd_addvariable
 help_cmd_delparent
 help_cmd_delvariable
 help_cmd_ancestors
+help_cmd_delshortcut
+help_cmd_chmod
 help_cmd_delmethod
+help_cmd_eval
+help_cmd_grep
 help_cmd_id
 help_cmd_join
+help_cmd_trace
+help_cmd_undefsetting
+help_cmd_defsetting
+help_cmd_configsetting
 help_cmd_teleport
 help_cmd_attach
 help_cmd_bugs
@@ -537,14 +633,60 @@
 help_cmd_help
 help_cmd_age
 help_cmd_audit
+help_cmd_chmanage
 help_cmd_commands
 help_cmd_context
 help_cmd_date
 help_cmd_examine
 help_cmd_finger
+help_cmd_managed
+help_cmd_manager
+help_cmd_map
+help_cmd_monitor
 help_cmd_news
 help_cmd_password
 help_cmd_quit
+help_cmd_status
+help_cmd_exits
+help_cmd_whereis
+help_cmd_who
+help_cmd_drop
+help_cmd_get
+help_cmd_inventory
+help_cmd_look
+help_cmd_quote
+help_cmd_remembered
+help_cmd_forget
+help_cmd_aca
+help_cmd_dca
+help_cmd_ca
+help_cmd_edit
+help_cmd_cs
+help_cmd_mcp_upload
+help_cmd_give
+help_cmd_walk
+help_cmd_add_trustee
+help_cmd_add_writer
+help_cmd_del_trustee
+help_cmd_del_writer
+help_cmd_name_templates
+help_cmd_registered
+help_cmd_register_name
+help_cmd_trusted
+help_cmd_trusts
+help_cmd_writers
+help_cmd_writes
+help_cmd_channel_acm
+help_cmd_channel_dcm
+help_cmd_channel_desc
+help_cmd_channel_join_lock
+help_cmd_channel_leave_lock
+help_cmd_channel_use_lock
+help_cmd_channel_purge
+help_cmd_channel_add
+help_cmd_channels
+help_cmd_kick
+help_cmd_quota
 help_obj
 help_cml_colors
 help_obj_trie
@@ -576,6 +718,11 @@
 help_formatting_objects
 help_node_commands
 help_obj_code_lib
+help_obj_generic_map
+help_obj_world_time
+help_obj_time
+help_obj_robot
+help_obj_robot_methods
 help_sys
 help_sys_events
 help_sys_event_register
@@ -595,6 +742,12 @@
 help_sys_word
 help_ranges
 help_sys_bad_commands
+help_sys_parser
+help_obj_command_cache
+help_obj_command_cache_smeths
+help_obj_command_cache_cmeths
+help_obj_command_cache_dmeths
+help_parser_command_modules
 gender
 gender_first_person
 gender_female
@@ -602,55 +755,6 @@
 gender_male
 gender_plural
 gender_neuter
-finger_interface
-login_interface
-http_interface
-logic_frob
-xor
-and
-and_lock_frob
-lock_frob
-object_lock_frob
-inside_lock_frob
-indirect_lock_frob
-owner_lock_frob
-carry_lock_frob
-parent_lock_frob
-not
-not_lock_frob
-or
-or_lock_frob
-true
-true_lock_frob
-false
-false_lock_frob
-read_parser
-callback
-message_frob
-trie
-ctext_frob
-tag
-format
-generator
-climate_frob
-rect
-rtree
-propagator
-connection
-outbound_connection
-ident_connection
-inbound_connection
-http_connection
-smtp_connection
-login_connection
-finger_connection
-smtp
-daemon
-login_daemon
-smtp_daemon
-finger_daemon
-http_daemon
-dns
 world_time
 user_parsers
 null_parser
@@ -661,10 +765,10 @@
 eval_parser
 filters
 wrap_filter
-lock_parser
 editor_session
 propagator_effects
 adapter
+bug_handler
 symbol
 math
 english_lib
@@ -678,5 +678,6 @@
 http_lib
 converters
 security_lib
+mime_lib
 directories
 dir_desktop
diff -rwu ColdCore-3.0a9.02/src/admin.cdc ColdCore-3.0a10/src/admin.cdc
--- ColdCore-3.0a9.02/src/admin.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/admin.cdc	Sat Mar 14 15:49:06 1998
@@ -1,11 +1,13 @@
 
 new object $admin: $programmer;
 
*var $admin configured_core = '-' admin.cdc
 var $admin shutdown_started = 0;
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $foundation defined_msgs = #[["mojo-on", #[['branches, ["general", "actor"]]]], ["mojo-off", #[['branches, ["general", "actor"]]]], ["mojo-look", #[['branches, ["general", "actor"]]]]];
 var $foundation msgs = #[["mojo-on", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, "'s eyes glow as Mojo courses through ", <$generator, ["actor.pp", [], [], 'gen_actorpp]>, " body."], #[['this, $admin]]]>], ["actor", <$ctext_frob, [["Your eyes glow as Mojo courses through your body."], #[['this, $admin]]]>]]], ["mojo-off", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, "'s eyes stop glowing as the Mojo leaves ", <$generator, ["actor.pp", [], [], 'gen_actorpp]>, " body."], #[['this, $admin]]]>], ["actor", <$ctext_frob, [["Your eyes stop glowing as the Mojo leaves your body."], #[['this, $admin]]]>]]], ["mojo-look", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, "'s eyes ", <$generator, ["mojo.what", [], [], 'gen_mojowhat]>, "glow from Mojo."], #[['this, $admin]]]>], ["actor", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, "'s eyes ", <$generator, ["mojo.what", [], [], 'gen_mojowhat]>, "glow from mojo."], #[['this, $admin]]]>]]]];
@@ -28,7 +30,11 @@
   ["@reap",\
     [["@reap", "*", "@reap <any>", 'reap_cmd, #[[1, ['any, []]]]]]],\
   ["@quota",\
-    [["@quota", "* to *", "@quota <object> to <any:+e?xempt>", 'quota_cmd, #[[1, ['object, []]], [3, ['any_opt, ["e?xempt"]]]]]]]];
+    [["@quota", "* to *", "@quota <object> to <any:+e?xempt>", 'quota_cmd, #[[1, ['object, []]], [3, ['any_opt, ["e?xempt"]]]]]]],\
+  ["@kick",\
+    [["@kick", "*", "@kick <any>", 'kick_cmd, #[[1, ['any, []]]]]]],\
+  ["@chman?age",\
+    [["@chman?age", "*", "@chman?age <any>", 'chmanage_cmd, #[[1, ['any, []]]]]]]];
 var $has_name name = ['prop, "Generic Admin", "Generic Admin"];
 var $located location = $body_cave;
 var $located obvious = 1;
@@ -44,12 +50,13 @@
 var $mail_ui subscribed = #[[$admin, [791485891, 0]]];
 var $programmer eval_prefix = #[["me", "me = this()"], ["here", "here = this().location()"]];
 var $root created_on = 796268969;
-var $root flags = ['methods, 'code, 'core, 'command_cache, 'variables];
+var $root defined_settings = #[["admin-role", #[]]];
+var $root flags = ['methods, 'code, 'core, 'variables, 'general_cache];
 var $root inited = 1;
 var $root managed = [$admin];
 var $root manager = $admin;
 var $root quota = 75000;
-var $root settings = #[["home", $body_cave]];
+var $root settings = #[["home", $body_cave], ["admin-role", ""]];
 var $thing gender = $gender_neuter;
 var $user connected_at = 0;
 var $user connections = [];
@@ -80,8 +87,13 @@
         if (!email)
             return (who.namef('ref)) + " does not have an email address!";
         catch any {
-            $smtp.sendmail('admin, email, ("[" + ($motd.server_name())) + "] password change.", ((("The password for the user " + (who.name())) + " on ") + ($motd.server_name())) + " has been set as:", "", "    " + pwd, "", "This is an automatic message sent to the supplied address.  If this message is in error simply discard it.", "", "If no connections are made to this user within a week it will be purged.");
+            $smtp.sendmail('admin, email, ("[" + ($motd.server_name())) + "] password change.", [((("The password for the user " + (who.name())) + " on ") + ($motd.server_name())) + " has been set as:", "", "    " + pwd, "", "This is an automatic message sent to the supplied address.  If this message is in error simply discard it.", "", "If no connections are made to this user within a week it will be purged."]);
         } with {
+            if (error() == ~error) {
+                .tell(("While trying to email '" + email) + "':");
+                .tell((traceback()[1])[2]);
+                return "** Aborting adjustment **";
+            }
             .tell_traceback(traceback());
             return "** Unable to send mail message, no changes made **";
         }
@@ -97,9 +109,7 @@
     (> who.chparents(valid[what], @p) <);
     
     // update caches.
-    for o in (parents())
-        o.cache_init();
-    who.rehash_caches();
+    who.cache_client_init();
     
     // let'em know what we did
     what = what.add_indefinite();
@@ -144,161 +154,23 @@
     }
 };
 
-public method .configure_core() {
-    var list, l, x, t, err;
-    
-    // get the juice
-    $sys.add_to_system(this());
-    
-    // expand on this as we go
-    .tell(["*" * 78, strfmt("%78{*}c", " Welcome to ColdCore "), "*" * 78]);
-    .tell(("This is an interactive configuration system which any admin who connects (until it is completed) is sent through.  You must complete this configuration before you can do anything else.  You can skip a specific question at any time by typing '@skip'.  Suggested default values will be enclosed in square brackets.  Pressing enter without any value will use the default value.".wrap_lines(78)).mmap('center, 78));
-    .tell("*" * 78);
-    
-    // first question please
-    if (!($admin.configured_core('new_user_class))) {
-        .tell("What class should new users be created as?  Available classes:");
-        list = filter x in ($user.descendants()) where ('command_cache in (x.flags()));
-        t = $sys.get_new_user_class();
-        list = map x in (list) to ((list == t) ? (x + " (current class)") : x);
-        .tell(list.prefix("    "));
-        while (!l) {
-            refresh();
-            l = .prompt("New User Class [$user] ");
-            if (l == "@skip") {
-                .tell("Skipping..");
-                break;
-            }
-            if (l) {
-                catch any {
-                    l = $object_lib.to_dbref(l);
-                    if (!(l in list))
-                        .tell("Invalid selection, try again.");
-                } with {
-                    .tell(("Invalid selection '" + l) + "'");
-                    continue;
-                }
-            } else {
-                l = $user;
-            }
-            $sys.set_setting("new-user-class", $sys, l);
-            $admin.configured_core('new_user_class, 1);
-            .tell("New User Class set to: " + l);
-        }
-        .tell(["", "You can set this at any time, with the command:"]);
-        .tell("  @set $sys:new-user-class=" + l);
-    }
-    refresh();
-    
-    // server name/title
-    if (!($admin.configured_core('server_name))) {
-        .tell(["", "---"]);
-        l = (.prompt("What is your server name? [My Server] ")) || "My Server";
-        if (l == "@skip") {
-            .tell("Skipping..");
-        } else {
-            $motd.set_setting("server-name", $motd, l);
-            $admin.configured_core('server_name, 1);
-            .tell("Server name set to: " + l);
-        }
-        .tell(["", "You can set this at any time, with the command:"]);
-        .tell("  @set $motd:server-name=" + l);
-    }
-    refresh();
-    if (!($admin.configured_core('server_title))) {
-        .tell(["", "---"]);
-        t = $motd.server_title();
-        l = (.prompt(("What is your server title? [" + t) + "] ")) || t;
-        if (l == "@skip") {
-            .tell("Skipping..");
-        } else {
-            $motd.set_setting("server-title", $motd, l);
-            $admin.configured_core('server_title, 1);
-            .tell("Server title set to: " + l);
-        }
-        .tell(["", "You can set this at any time, with the command:"]);
-        .tell("  @set $motd:server-title=" + l);
-    }
-    refresh();
-    if (!($admin.configured_core('daemons))) {
-        .tell(["", "---"]);
-        while (1) {
-            refresh();
-            list = ($daemon.children()).setremove($login_daemon);
-            .tell("Which network daemons do you want to have automatically startup,");
-            .tell("Other than $login_daemon.  Available daemons:");
-            t = filter l in ($sys.get_startup_objects()) where (l.is($daemon));
-            for l in (list) {
-                if (l in t)
-                    .tell(strfmt("  %20s (auto starting)", l));
-                else
-                    .tell("  " + l);
-            }
-            l = .prompt(("Auto-Start: [" + (t.join(", "))) + "] ");
-            if (l == "@skip") {
-                .tell("Skipping..");
-                break;
-            } else if (!l) {
-                .tell("Using existing daemons: " + (t.join(", ")));
-                break;
-            } else {
-                err = 0;
-                for x in (l.explode_english_list()) {
-                    catch any {
-                        $sys.set_setting("startup-objects", $sys, "+" + x);
-                        .tell(("Added " + x) + " as a startup daemon.");
-                    } with {
-                        .tell(("Unable to add '" + x) + "' as a daemon:");
-                        .tell("=> " + ((traceback()[1])[2]));
-                        err++;
-                    }
-                }
-                if (!err) {
-                    $admin.configured_core('daemons, 1);
-                    break;
-                }
-                .tell("Errors occurred...");
-            }
-        }
-        .tell(["", "You can set this at any time, with the command:"]);
-        .tell("  @set $motd:startup-objects=OBJECTS...");
-    }
-    
-    // Other things to add: HTTP Virtual Hosting info,
-    // cleanup
-    list = $admin.list_method('login);
-    list = filter l in (list) where (!match_regexp(l, "\.configure_core\(\);"));
-    if (list)
-        $admin.add_method(list, 'login);
-    else
-        $admin.del_method('login);
-    $admin.del_var('configured_core);
-    $admin.add_var('configured_core);
-    .tell(["", strfmt("%79{*}c", " Configuration Complete ")]);
-};
-
-public method .configured_core() {
-    arg item, @yes;
-    
-    if (!yes)
-        return (| configured_core[item] |) || 0;
-    configured_core = configured_core.add(item, 1);
-};
-
-public method .core_admin() {
-    var code, defs;
+protected method .chmanage_cmd() {
+    arg cmdstr, cmd, args;
+    var obj, manager;
     
-    catch any {
-        .add_var('configured_core);
-        configured_core = #[];
-        if ((| .find_method('login) |) == $admin)
-            code = .list_method('login);
-        else
-            code = (defs = []);
-        .add_method(code + [".configure_core();"], 'login);
-    } with {
-        $sys.log($parse_lib.traceback());
-    }
+    (> .perms(caller(), 'command) <);
+    args = (args.replace(" to ", " ")).explode();
+    if ((!args) || ((args.length()) != 2))
+        (> .tell_error(cmd + " <object> [to] <user>") <);
+    obj = .match_env_nice(args[1]);
+    manager = .match_env_nice(args[2]);
+    if ((!(manager.is($user))) && (!(.is($admin))))
+        return "Sorry you can only set users as managers.";
+    catch any
+        (> obj.change_manager(manager) <);
+    with
+        return (traceback()[1])[2];
+    return ((("Manager on " + (obj.namef('xref))) + " changed to ") + (manager.namef('xref))) + ".";
 };
 
 protected method .core_cmd() {
@@ -389,14 +261,31 @@
     $sys.new_admin();
 };
 
-public method .login() {
+public method .kick_cmd() {
+    arg cmdstr, cmd, user;
+    var x, u;
+    
+    (> .check_mojo() <);
+    catch ~namenf {
+        u = $user_db.match(user);
+        u.tell((sender().name()) + " has kicked you from the system.");
+        pause();
+        for x in (u.connections())
+            x.destroy();
+        sender().tell((u.name()) + " has been kicked from the system.");
+    } with {
+        sender().tell(("Usage: " + cmd) + " <player name>.");
+    }
+};
+
+protected method .login() {
     arg connection;
     
     pass(connection);
-    .configure_core();
+    $sys.configure_core();
 };
 
-public method .logout() {
+protected method .logout() {
     arg @args;
     
     (| $sys.del_from_system(this()) |);
@@ -405,16 +294,13 @@
 
 protected method .mojo() {
     arg @args;
-    var name;
+    var mojo_what;
     
-    if (args)
-        name = "Your ";
-    else
-        name = (.name()) + "'s ";
-    if (this() in ($sys.system()))
-        return name + "eyes glow from Mojo.";
+    if (!(this() in ($sys.system())))
+        mojo_what = "do not ";
     else
-        return name + "eyes do not glow from Mojo.";
+        mojo_what = "";
+    return .eval_message("mojo-look", $admin, #[["$actor", this()], ["actor", .name()], ["actor.pp", (.gender()).pronoun('pp)], ["mojo.what", mojo_what]]);
 };
 
 protected method .mojo_cmd() {
@@ -438,6 +324,19 @@
     }
 };
 
+public method .move_cmd() {
+    arg cmd, cmdstr, args;
+    var how;
+    
+    // Is this moving or a copy?
+    how = match_begin(cmd, "@c") ? 'copy : 'move;
+    if (how == 'move) {
+        if ((((args[1])[1]) == 'object) && (((args[1])[2]).is($user)))
+            (> .check_mojo('benice) <);
+    }
+    return pass(cmd, cmdstr, args);
+};
+
 protected method .new_password_cmd(): nooverride  {
     arg cmdstr, cmd, user;
     var new, email;
@@ -449,7 +348,7 @@
         return (user.namef('ref)) + " does not have an email address!";
     new = $code_lib.random_password();
     catch any {
-        $smtp.sendmail('admin, email, ("[" + ($motd.server_name())) + "] password change.", ((("The password for the user " + (user.name())) + " on ") + ($motd.server_name())) + " has been changed to:", "", "    " + new, "", "This is an automatic message sent to the supplied address.  If this message is in error simply discard it.", "", "This password was changed by " + (.name()));
+        $smtp.sendmail('admin, email, ("[" + ($motd.server_name())) + "] password change.", [((("The password for the user " + (user.name())) + " on ") + ($motd.server_name())) + " has been changed to:", "", "    " + new, "", "This is an automatic message sent to the supplied address.  If this message is in error simply discard it.", "", "This password was changed by " + (.name())]);
     } with {
         .tell_traceback(traceback());
         return "** Unable to send mail message, password not changed **";
@@ -507,7 +406,7 @@
     
     t = time();
     reap = [];
-    .tell([("--- Reap Possibilities (Not connected for " + ($time.to_english(thresh))) + ")", strfmt("E %28L %3l %12l %12l %l", "User", "MNG", "Notified", "Last On", "Age"), strfmt("- %28L %3l %12l %12l %l", "----", "---", "-------", "-------", "---")]);
+    .tell([("--- Reap Possibilities (Not connected for " + ($time.to_english(thresh))) + ")", strfmt("E %21L %3l %10l %10l %10l %l", "User", "MNG", "Created", "Notified", "Last On", "Idle"), strfmt("- %21L %3l %10l %10l %10l %l", "----", "---", "-------", "-------", "-------", "----")]);
     for u in ($user.descendants()) {
         if ((u.connected()) || ((u.has_flag('core)) || (u.is($admin))))
             continue;
@@ -533,10 +432,10 @@
         if (!m)
             m = "newborn";
         if (u.reap_notified())
-            n = $time.format("%v", u.reap_notified());
+            n = $time.format("%e-%b-%y", u.reap_notified());
         else
             n = "";
-        reap += [[last, strfmt("%s %28L %3l %12l %12l %l", ((u.get_setting("rl-email", $user_info))[2]) ? " " : "!", u.namef('xref), listlen(u.managed()), n, $time.format("%v", last), m)]];
+        reap += [[last, strfmt("%s %21L %3l %10l %10l %10l %l", ((u.get_setting("rl-email", $user_info))[2]) ? " " : "!", u.name(), listlen(u.managed()), $time.format("%e-%b-%y", u.created_on()), n, $time.format("%e-%b-%y", last), m)]];
     }
     .tell(((reap.sort()).slice(2)).reverse());
     return "---";
@@ -567,7 +466,7 @@
     if (!(> $parse_lib.ask("Send this email message? [yes] ", "(yes|y)", "yes") <))
         return "Message not sent.";
     catch any {
-        $smtp.sendmail('admin, email, subj, @msg);
+        $smtp.sendmail('admin, email, subj, msg);
     } with {
         .tell_traceback(traceback());
         return "** Unable to send message";
@@ -686,49 +585,36 @@
     
     (> .perms(caller(), 'command) <);
     (> .check_mojo() <);
-    purge = (o = "p?urge" in ((args[2]).slice(1))) && (((args[2])[o])[3]);
-    if (purge) {
-        .tell("Building descendants list..");
-        pause();
-        pause();
-        user_interfaces = $user_interfaces.descendants();
-        other = (((($command_cache.children()).setremove($user_interfaces)).mmap('descendants)).flatten()).compress();
+    .tell("Purging caches..");
         pause();
         pause();
     
         // go atomic, we do not want confused users trying to run commands that
         // do not exist...
         $sys.atomic(1);
-        for o in (other + user_interfaces) {
-            if (o.is_command_cache())
-                .tell("Purging " + (o.namef('ref)));
-            (| o.purge_caches() |);
+    
+    // purge everything
+    for o in ($command_cache.descendants()) {
+        (| o.purge_cache() |);
             refresh();
         }
     
-        // get back 'other' caches--nobody said this was going to be fast.
+    // rehash non-general caches
+    other = ($command_cache.children()).setremove($user_interfaces);
+    other = ((other.mmap('descendants)).flatten()).compress();
         for o in (other) {
-            o.rehash_caches();
+        if (!(o.is_general_cache())) {
+            (| o.rehash_cache() |);
             refresh();
         }
     }
+    $remote_cache.rehash_cache();
     
-    // user caches
+    // re-init user clients
     initted = #[];
     for o in ((| $user_db.connected() |) || [this()]) {
-        for p in ((| o.parents() |) || []) {
-            if (!(initted.contains(p))) {
-                .tell("Initializing " + (p.namef('ref)));
-                catch any {
-                    (> p.rehash_caches() <);
-                } with {
-                    .tell(("--- traceback from " + p) + ".cache_init():");
-                    .tell_traceback(traceback());
-                    .tell("---");
-                }
-                initted = initted.add(p, 1);
-            }
-        }
+        .tell("Initializing " + (o.namef('ref)));
+        o.cache_client_init();
         refresh();
     }
     
@@ -762,6 +762,61 @@
     }
     .tell("Ok!");
     $sys.do_shutdown(time, why);
+};
+
+protected method .status_cmd() {
+    arg cmdstr, com, @args;
+    var opt, cache, x, y, width, depth, info, out, str, pre, dstr, dirty, c;
+    
+    (> .perms(caller(), 'command) <);
+    opt = $parse_lib.opt(args.join(" "), "c?ache", "d?irtyonly");
+    if ((x = "c?ache" in ((opt[2]).slice(1))))
+        cache = 1;
+    if (!cache)
+        return pass(cmdstr, com, @args);
+    [width, depth, info] = $sys.cache_info();
+    out = [((((("Cache Size: " + width) + "x") + depth) + " (") + (width * depth)) + " total object capacity)"];
+    info = map x in (info) to (strsub(x, "i", ".", "c"));
+    if (width < 80) {
+        if (width < 78) {
+            pre = 1;
+            str = " +";
+        } else {
+            pre = 0;
+            str = "";
+        }
+        str = strfmt(str + "%*{-}c", width, " WIDTH ");
+        out += ["Cache Map (Horizontal):", str];
+        dstr = "DEPTH";
+        for y in [1 .. depth] {
+            if (pre) {
+                if (y <= strlen(dstr))
+                    str = (dstr[y]) + "|";
+                else
+                    str = " |";
+            } else {
+                str = "";
+            }
+            for x in [1 .. width] {
+                refresh();
+                if (strlen(info[x]) >= y) {
+                    c = (info[x])[y];
+                    str += (info[x])[y];
+                } else {
+                    str += " ";
+                }
+            }
+            out += [str];
+        }
+        if (pre)
+            out += [" +" + ("-" * width)];
+        else
+            out += ["-" * width];
+    } else {
+        str = strfmt(" +%*{-}c", depth, " DEPTH ");
+        out += ["Cache Map (Vertical):", str] + (info.prefix(" |"));
+    }
+    return out + ["Object Legend: a=active, A=active+dirty, .=inactive, I=inactive+dirty"];
 };
 
 protected method .tasks_cmd() {
diff -rwu ColdCore-3.0a9.02/src/ansi_format.cdc ColdCore-3.0a10/src/ansi_format.cdc
--- ColdCore-3.0a9.02/src/ansi_format.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/ansi_format.cdc	Sat Mar 14 15:49:03 1998
@@ -1,5 +1,5 @@
 
-new object $ansi_format: $plain_format;
+new object $ansi_format: $tagged_format;
 
 var $ansi_format bcolors = #[["black", "40"], ["red", "41"], ["green", "42"], ["yellow", "43"], ["blue", "44"], ["magenta", "45"], ["cyan", "46"], ["white", "47"]];
 var $ansi_format colors = #[["black", "30"], ["red", "31"], ["green", "32"], ["yellow", "33"], ["blue", "34"], ["magenta", "35"], ["cyan", "36"], ["white", "37"]];
@@ -10,6 +10,168 @@
 var $root managed = [$ansi_format];
 var $root manager = $ansi_format;
 
+public method .ansi_wrap_line() {
+    arg str, len, @stuff;
+    var output, cutoff, firstline, prefix, plen, x, ansilist, lengthvals, counter, elem, wordlist, wordsum, flag;
+    
+    // Thanks Scott for letting me port this back from TEC.
+    //   - Bruce
+    // takes string and wraps it by words, compared to length, returns a list. 
+    [(prefix ?= ""), (firstline ?= 0)] = stuff;
+    output = "";
+    if (firstline)
+        str = prefix + str;
+    plen = strlen(prefix);
+    while (strlen(str) > len) {
+        refresh();
+        flag = "\n";
+        counter = 0;
+    
+        // Check for ansi codes first
+        ansilist = .weed_ansi(str);
+    
+        // If there are ansi codes, do the spiel, otherwise do a regular
+        // line wrap (this can happen on a segment by segment basis)
+        if (listlen(ansilist) > 1) {
+            // create a word-only list w/o the ansi codes, and a letter-count
+            // list both for the entire list and for the word-only list
+            lengthvals = map x in (ansilist) to (strlen(x));
+            wordlist = ansilist.odds();
+            wordsum = map x in (wordlist) to (strlen(x)).sum();
+    
+            // wordsum = lengthvals.odds().sum();
+            // if the letter-count for the word-only list is greater than the 
+            // line length, then we'll need to hack it up, otherwise, we'll
+            // just use the length of the entire line, codes and all
+            if (wordsum > len) {
+                // We've got too many letters. Have to find out where in
+                // the word (non-ansi-code) part of the string the len is.
+                // we mark its spot in the master list, but only count its
+                // letter value if it's really a word. We also need to
+                // remember how many letters we've gone through before
+                // possibly hitting a big chunk of string (counter).
+                elem = find x in (ansilist) where ((x in wordlist) && ((counter += strlen(x)) > len));
+                if (elem)
+                    counter -= strlen(x);
+    
+                // Going to establish where to cut the string. Take the
+                // sum of the letter-count list up to the marker we just found
+                cutoff = (lengthvals.subrange(1, elem - 1)).sum();
+    
+                // We already know the string is too long for a line, or we
+                // wouldn't be here. If the counter is less than our line length
+                // it probably means the next element was too long to add, 
+                // (a big chunk of string with no codes) so we'll tack on the
+                // len - our counter value.
+                if (counter < len)
+                    cutoff += len - counter;
+                cutoff = stridx(substr(str, 1, cutoff), " ", -1);
+            } else {
+                cutoff = lengthvals.sum();
+                flag = "";
+            }
+        } else {
+            cutoff = stridx(substr(str, 1, len), " ", -1);
+        }
+    
+        // The rest of this has been tweaked slightly. The main goal was to
+        // get cutoff vals that this section of the code will be happy with.
+        if (cutoff <= plen) {
+            output += "\n" + substr(str, 1, len);
+            str = prefix + substr(str, len + 1);
+        } else {
+            output += "\n" + substr(str, 1, cutoff);
+            str = prefix + substr(str, cutoff + 1);
+        }
+    }
+    
+    // Here's the tweak and the pain in the ass I'd like solved. When the
+    // length of the word value of the string matches the line length, the
+    // extra "\n" a the end causes extra spacing for .atelln()
+    return (output ? ((output.subrange(3)) + flag) : "") + str;
+};
+
+public method .ansi_wrap_lines() {
+    arg str, len, @stuff;
+    var output, cutoff, firstline, prefix, plen, x, ansilist, lengthvals, counter, elem, wordlist, wordsum, flag;
+    
+    // Thanks Scott for letting me port this back from TEC.
+    //   - Bruce
+    // takes string and wraps it by words, compared to length, returns a list. 
+    [(prefix ?= ""), (firstline ?= 0)] = stuff;
+    output = [];
+    if (firstline)
+        str = prefix + str;
+    plen = strlen(prefix);
+    while (strlen(str) > len) {
+        refresh();
+        flag = "\n";
+        counter = 0;
+    
+        // Check for ansi codes first
+        ansilist = .weed_ansi(str);
+    
+        // If there are ansi codes, do the spiel, otherwise do a regular
+        // line wrap (this can happen on a segment by segment basis)
+        if (listlen(ansilist) > 1) {
+            // create a word-only list w/o the ansi codes, and a letter-count
+            // list both for the entire list and for the word-only list
+            lengthvals = map x in (ansilist) to (strlen(x));
+            wordlist = ansilist.odds();
+            wordsum = map x in (wordlist) to (strlen(x)).sum();
+    
+            // wordsum = lengthvals.odds().sum();
+            // if the letter-count for the word-only list is greater than the 
+            // line length, then we'll need to hack it up, otherwise, we'll
+            // just use the length of the entire line, codes and all
+            if (wordsum > len) {
+                // We've got too many letters. Have to find out where in
+                // the word (non-ansi-code) part of the string the len is.
+                // we mark its spot in the master list, but only count its
+                // letter value if it's really a word. We also need to
+                // remember how many letters we've gone through before
+                // possibly hitting a big chunk of string (counter).
+                elem = find x in (ansilist) where ((x in wordlist) && ((counter += strlen(x)) > len));
+                if (elem)
+                    counter -= strlen(x);
+    
+                // Going to establish where to cut the string. Take the
+                // sum of the letter-count list up to the marker we just found
+                cutoff = (lengthvals.subrange(1, elem - 1)).sum();
+    
+                // We already know the string is too long for a line, or we
+                // wouldn't be here. If the counter is less than our line length
+                // it probably means the next element was too long to add, 
+                // (a big chunk of string with no codes) so we'll tack on the
+                // len - our counter value.
+                if (counter < len)
+                    cutoff += len - counter;
+                cutoff = stridx(substr(str, 1, cutoff), " ", -1);
+            } else {
+                cutoff = lengthvals.sum();
+                flag = "";
+            }
+        } else {
+            cutoff = stridx(substr(str, 1, len), " ", -1);
+        }
+    
+        // The rest of this has been tweaked slightly. The main goal was to
+        // get cutoff vals that this section of the code will be happy with.
+        if (cutoff <= plen) {
+            output += [substr(str, 1, len)];
+            str = prefix + substr(str, len + 1);
+        } else {
+            output += [substr(str, 1, cutoff)];
+            str = prefix + substr(str, cutoff + 1);
+        }
+    }
+    
+    // Here's the tweak and the pain in the ass I'd like solved. When the
+    // length of the word value of the string matches the line length, the
+    // extra "\n" a the end causes extra spacing for .atelln()
+    return output + [str];
+};
+
 public method .do_detail() {
     arg vars, flags, args;
     
@@ -80,16 +242,16 @@
 
 public method .format() {
     arg data, vars;
-    var str, len, line, out;
+    var str, len, line;
     
     str = (> (._eval_ctext(data, vars))[1] <);
     if ((strlen(str) < 2) || (substr(str, strlen(str) - 1) != "\n"))
         str += "\n";
     
     // ugly and inneficient--use a client people
-    out = str_to_buf(str);
-    out = out.bufsub(`[92, 65], `[27, 91]);
-    return out;
+    // out = str_to_buf(str);
+    // out = out.bufsub(`[92, 65], `[27, 91]);
+    return str_to_buf(str).bufsub(`[92, 65], `[27, 91]);
 };
 
 public method .hold_rewrap_lines() {
@@ -136,6 +136,33 @@
         output += tstr;
     }
     return output + [str];
+};
+
+public method .rewrap_lines() {
+    arg vars, str, prefix;
+    var s, p, n, firstline;
+    
+    s = [];
+    n = (vars['width]) + (prefix.length());
+    for str in (str.explode("\n", 1))
+        s += .ansi_wrap_lines(str, n, prefix, 1);
+    return s.join("\n");
+};
+
+public method .tag_text() {
+    arg str;
+    var mode, token;
+    
+    return map token in (.weed_ansi(str)) to ((mode = !mode) ? token : "").join("");
+};
+
+public method .weed_ansi() {
+    arg str;
+    var out;
+    
+    out = str.global_regexp("[\]A[0-9A-LN-Za-ln-z;]+m");
+    return out;
+    return str.global_regexp("\\\A[0-9A-Ln-z;a-ln-z;]+[a-z]");
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/antisocial.cdc ColdCore-3.0a10/src/antisocial.cdc
--- ColdCore-3.0a9.02/src/antisocial.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/antisocial.cdc	Sat Mar 14 15:49:07 1998
@@ -2,6 +2,9 @@
 new object $antisocial: $user_interfaces;
 
 var $antisocial antisocial_msgs = #[["feh", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " kicks ", <$generator, ["who", [], [], 'gen_who]>, " rather firmly in the kiester."], #[['this, $antisocial]]]>]];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $foundation defined_msgs = #[["ice", #[['branches, ["general", "actor", "who"]]]], ["eye", #[['branches, ["general", "actor", "who"]]]], ["pat", #[['branches, ["general", "actor", "who"]]]], ["pummel", #[['branches, ["general", "actor", "who"]]]], ["prod", #[['branches, ["general", "actor", "who"]]]], ["kick", #[['branches, ["general", "actor", "who"]]]], ["hug", #[['branches, ["general", "actor", "who"]]]], ["beat", #[['branches, ["general", "actor", "who"]]]], ["hit", #[['branches, ["general", "actor", "who"]]]], ["peer", #[['branches, ["general", "actor", "who"]]]], ["bite", #[['branches, ["general", "actor", "who"]]]], ["nip", #[['branches, ["general", "actor", "who"]]]], ["poke", #[['branches, ["general", "actor", "who"]]]], ["bonk", #[['branches, ["general", "actor", "who"]]]], ["fart", #[['branches, ["general", "actor", "who"]]]]];
 var $foundation msgs = #[["ice", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pours a bucket of ice water over ", <$generator, ["who", [], [], 'gen_who]>, "'s head."], #[]]>], ["actor", <$ctext_frob, [["You pour a bucket of ice water over ", <$generator, ["who", [], [], 'gen_who]>, "'s head."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pours a bucket of ice water over your head."], #[]]>]]], ["eye", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " eyes ", <$generator, ["who", [], [], 'gen_who]>, " warily."], #[]]>], ["actor", <$ctext_frob, [["You eye ", <$generator, ["who", [], [], 'gen_who]>, " warily."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " eyes you warily."], #[]]>]]], ["pat", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pats ", <$generator, ["who", [], [], 'gen_who]>, " onna head."], #[]]>], ["actor", <$ctext_frob, [["You pat ", <$generator, ["who", [], [], 'gen_who]>, " onna head."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pats you onna head."], #[]]>]]], ["pummel", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pummels ", <$generator, ["who", [], [], 'gen_who]>, " into a milky white substance."], #[]]>], ["actor", <$ctext_frob, [["You pummel ", <$generator, ["who", [], [], 'gen_who]>, " into a milky white substance."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pummels you into a milky white substance. ouch."], #[]]>]]], ["prod", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " prods ", <$generator, ["who", [], [], 'gen_who]>, " with a cowpoke."], #[]]>], ["actor", <$ctext_frob, [["You prod ", <$generator, ["who", [], [], 'gen_who]>, " with a cowpoke."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " prods you with a cowpoke. ouch."], #[]]>]]], ["kick", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " kicks ", <$generator, ["who", [], [], 'gen_who]>, " firmly in the kiester."], #[]]>], ["actor", <$ctext_frob, [["You kick ", <$generator, ["who", [], [], 'gen_who]>, " firmly in the kiester."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " kicks you firmly in the kiester."], #[]]>]]], ["hug", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " bear hugs ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["actor", <$ctext_frob, [["You bear hug ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " bear hugs you. oif."], #[]]>]]], ["beat", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pulls out a stick and beats the ", <$generator, ["who", [], [], 'gen_who]>, " repeatedly."], #[]]>], ["actor", <$ctext_frob, [["You pull out a stick and beat the ", <$generator, ["who", [], [], 'gen_who]>, " repeatedly."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " pulls out a stick and beats you repeatedly."], #[]]>]]], ["hit", #[["general", <$ctext_frob, [["Boldly, ", <$generator, ["actor", [], [], 'gen_actor]>, " pulls out a stick and beats the ", <$generator, ["who", [], [], 'gen_who]>, " repeatedly."], #[]]>], ["actor", <$ctext_frob, [["Boldly, you pull out a stick and beat the ", <$generator, ["who", [], [], 'gen_who]>, " repeatedly."], #[]]>], ["who", <$ctext_frob, [["Boldly, ", <$generator, ["actor", [], [], 'gen_actor]>, " pulls out a stick and beats you repeatedly. oif."], #[]]>]]], ["peer", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " peers suspiciously at ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["actor", <$ctext_frob, [["You peer suspiciously at ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " peers suspiciously at you."], #[]]>]]], ["bite", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " BITES ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["actor", <$ctext_frob, [["You BITE ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " BITES you."], #[]]>]]], ["nip", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " nips at ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["actor", <$ctext_frob, [["You nip at ", <$generator, ["who", [], [], 'gen_who]>, "."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " nips at you."], #[]]>]]], ["poke", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " firmly jabs ", <$generator, ["pro", [["actor", 1]], ["pp"], 'gen_pro]>, " index finger into ", <$generator, ["who", [], [], 'gen_who]>, "'s ribs."], #[]]>], ["actor", <$ctext_frob, [["You jab your index finger firmly into ", <$generator, ["who", [], [], 'gen_who]>, "'s ribs."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " firmly jabs ", <$generator, ["pro", [["actor", 1]], ["pp"], 'gen_pro]>, " index finger into your ribs. oif."], #[]]>]]], ["bonk", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " maliciously bonks ", <$generator, ["who", [], [], 'gen_who]>, " onna head."], #[]]>], ["actor", <$ctext_frob, [["You maliciously bonk ", <$generator, ["who", [], [], 'gen_who]>, " onna head."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " maliciously bonks you onna head. oif."], #[]]>]]], ["fart", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " farts in ", <$generator, ["who", [], [], 'gen_who]>, "'s general direction."], #[]]>], ["actor", <$ctext_frob, [["You fart in ", <$generator, ["who", [], [], 'gen_who]>, "'s general direction."], #[]]>], ["who", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " farts in your general direction."], #[]]>]]]];
 var $has_commands local = \
@@ -35,7 +35,7 @@
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
 var $root created_on = 838182893;
-var $root flags = ['variables, 'methods, 'code, 'command_cache, 'fertile, 'core];
+var $root flags = ['variables, 'methods, 'code, 'fertile, 'core, 'general_cache];
 var $root inited = 1;
 var $root managed = [$antisocial];
 var $root manager = $antisocial;
diff -rwu ColdCore-3.0a9.02/src/bad_commands.cdc ColdCore-3.0a10/src/bad_commands.cdc
--- ColdCore-3.0a9.02/src/bad_commands.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/bad_commands.cdc	Sat Mar 14 15:49:04 1998
@@ -2,6 +2,9 @@
 new object $bad_commands: $user_interfaces;
 
 var $bad_commands non_supported_cmds = #[["quit", "@quit"], ["WHO", "@who"], ["@create", "@new"], ["help", "@help"], ["news", "@news"], ["page", "@page"], ["@gender", "@set gender"], ["uptime", "@status"], ["@alias", "@add-command-alias` or `@add-name-alias"], ["@check", "@monitor"], ["@paranoid", "@monitor"], ["@version", "@status"], ["@lock", "@set lock"], ["@unlock", "@set lock"], ["+com", ["See: `@help Channels`"]]];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@create", [["@create", "*", "@create <any>", 'old_command_cmd, #[[1, ['any, []]]]]]],\
   ["help",\
diff -rwu ColdCore-3.0a9.02/src/body.cdc ColdCore-3.0a10/src/body.cdc
--- ColdCore-3.0a9.02/src/body.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/body.cdc	Sat Mar 14 15:49:04 1998
@@ -7,6 +7,9 @@
 var $body interaction = 0;
 var $body remote_command_cache = 0;
 var $body wearing = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = \
   #[["wh?isper", [["wh?isper", "* to *", "wh?isper <any> to <any>", 'whisper_cmd, #[[1, ['any, []]], [3, ['any, []]]]]]],\
@@ -36,8 +39,7 @@
 var $located obvious = 1;
*var $location contents = ' ' body.cdc
 var $root created_on = 796268969;
-var $root fertile = 1;
-var $root flags = ['methods, 'code, 'fertile, 'variables, 'core, 'command_cache];
+var $root flags = ['methods, 'code, 'variables, 'core, 'general_cache];
 var $root inited = 1;
 var $root managed = [$body];
 var $root manager = $body;
@@ -119,6 +121,7 @@
     
     //   else
     //       o += [.gender().pronoun('psc) + " is naked, baring it all to the world."];
+    if (o != [])
     ctext += [$ctext_frob.new_with(o)];
     return ctext;
 };
@@ -160,8 +163,20 @@
         .tell_realm_announce(origin, args[1]);
 };
 
+public method .get_cols() {
+    arg @args;
+    
+    return 80;
+};
+
+public method .get_rows() {
+    arg @args;
+    
+    return 79;
+};
+
 protected method .handle_parser_result() {
-    arg action, @more;
+    arg line, action, @more;
     var r, c;
     
     switch (action) {
@@ -173,17 +188,35 @@
                 .ptell(r, #[['type, 'parser], ['command, more[2]]]);
         case 'failed:
             for c in (($place_lib.coordinate_shortcuts()).keys()) {
-                if (action.match_template(c)) {
-                    .tell(("There is no exit " + action) + " here.");
+                if (line.match_template(c)) {
+                    .tell(("There is no exit " + line) + " here.");
                     r = 1;
                 }
             }
             if (!r)
-                .tell(("I don't understand " + (action.chop((.actionlen()) - 22))) + ".");
+                .tell(("I don't understand " + (line.chop((.linelen()) - 22))) + ".");
         case 'ok:
             // do nothing, probably a null command
         default:
-            ._tell("Unusual response from the parser: " + toliteral(more));
+            ._tell("Unusual response from the parser: " + more);
+    }
+};
+
+public method .linelen() {
+    return 79;
+};
+
+public method .match_env_nice() {
+    arg name, @syntax;
+    var obj, args, line;
+    
+    catch any {
+        return (> .match_environment(name) <);
+    } with {
+        if (syntax)
+            (> .tell_error(syntax[1], (traceback()[1])[2]) <);
+        else
+            throw(~stop, (traceback()[1])[2]);
     }
 };
 
@@ -216,7 +249,7 @@
             if (userdb)
                 target = (| $user_db.match_begin(recip) |);
             if (!target) {
-                catch ~objnf
+                catch ~objnf, ~namenf, ~invdbref
                     target = (> .match_environment(recip) <);
                 with
                     throw(~stop, (traceback()[1])[2]);
@@ -366,8 +399,27 @@
     
 };
 
+public method .tell_error() {
+    arg syntax, @problem;
+    var problem, line, sprefix, prefix, length;
+    
+    // arg 1 == syntax
+    // arg 2 == problem lines
+    length = .linelen();
+    if (syntax)
+        .tell(("=> Syntax: `" + syntax) + "`");
+    if (problem) {
+        for line in (problem) {
+            if (type(line) == 'string)
+                line = line.wrap_lines(length, "!  ", 1);
+            .tell(line);
+        }
+    }
+    throw(~stop, "");
+};
+
 public method .tell_realm_announce() {
-    arg realm, message;
+    arg last_realm, message;
     var loc, realm, propagator, prop_list, len, i;
     
     pause();
@@ -376,8 +428,10 @@
         return;
     prop_list = [propagator];
     realm = (.location()).realm();
+    if (type(message) == 'symbol)
+        message = realm.eval_message(tostr(message), $realm, realm.ctext_variables());
     while (realm != $realm) {
-        if (realm == realm) {
+        if (realm == last_realm) {
             len = prop_list.length();
             for i in [1 .. len] {
                 message = message.propagate(prop_list[(len - i) + 1]);
@@ -385,6 +439,7 @@
                     return;
             }
             .tell(message);
+            return;
         }
         if (!(propagator = realm.will_propagate()))
             return;
@@ -409,13 +464,16 @@
 
 protected method .to_say_cmd() {
     arg cmdstr, com, who, prep, message;
-    var targets, target, line;
+    var targets, target, line, invobj, here;
     
     (> .perms(caller(), $user, $body) <);
     catch ~ambig
         targets = (> .parse_interaction_reference(who, "say") <);
     with
         return (traceback()[1])[2];
+    here = .location();
+    if ((invobj = filter target in (targets) where ((target.location()) != here)))
+        return .tell(((invobj.to_english()) + (((invobj.length()) > 1) ? " are " : " is ")) + "not here in this location.");
     .add_interaction('objs, targets);
     line = (((.name()) + " (to ") + ((targets.mmap('name)).to_english())) + ") ";
     if (message)
@@ -483,7 +483,7 @@
     
     // exits should always be able to pull "bodies" through them
     // this becomes sortof a big override returning, but ... *shrug*
-    if (mover.is($exit))
+    if (mover.is($path))
         return;
     (> pass(mover, place) <);
 };
diff -rwu ColdCore-3.0a9.02/src/body_cave.cdc ColdCore-3.0a10/src/body_cave.cdc
--- ColdCore-3.0a9.02/src/body_cave.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/body_cave.cdc	Sat Mar 14 15:49:06 1998
@@ -1,13 +1,17 @@
 
 new object $body_cave: $place;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
+var $event_handler hooked = #[];
 var $event_handler hooks = #[];
 var $has_commands local = #[];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
 var $has_name name = ['uniq, "Body Cave", "the Body Cave"];
*var $location contents = ' ' body_cave.cdc
 var $physical visibility = -100;
 var $place entrances = [];
 var $place exits = [];
@@ -22,6 +22,12 @@
 public method .announce() {
     arg @who_cares;
     
+};
+
+public method .will_attach() {
+    arg type, @by_whom;
+    
+    throw(~perm, "Place is not publicly extendable.");
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/bug_handler.cdc ColdCore-3.0a10/src/bug_handler.cdc
--- ColdCore-3.0a9.02/src/bug_handler.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/bug_handler.cdc	Sat Mar 14 15:49:25 1998
@@ -1,11 +1,10 @@
 
-new object $bug_handler: $misc, $has_name;
+new object $bug_handler: $misc;
 
 var $bug_handler ticker = 0;
-var $bug_handler ticket = 30;
-var $bug_handler unclaimed_tally = 4;
+var $bug_handler ticket = 134;
+var $bug_handler unclaimed_tally = 26;
 var $dmi_data descriptions = #[];
-var $has_name name = ['uniq, "Bug Report Handler", "the Bug Report Handler"];
 var $root created_on = 866643320;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/builder.cdc ColdCore-3.0a10/src/builder.cdc
--- ColdCore-3.0a9.02/src/builder.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/builder.cdc	Sat Mar 14 15:49:05 1998
@@ -4,6 +4,9 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $foundation defined_msgs = #[["teleport", #[['branches, ["source", "dest", "actor"]]]]];
 var $foundation msgs = #[["teleport", #[["actor", <$ctext_frob, [["You teleport to ", <$generator, ["dest", [], [], 'gen_dest]>, "."], #[['this, $builder]]]>], ["source", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " teleports to ", <$generator, ["dest", [], [], 'gen_dest]>, "."], #[['this, $builder]]]>], ["dest", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " teleports here from ", <$generator, ["source", [], [], 'gen_source]>, "."], #[['this, $builder]]]>]]]];
@@ -41,7 +44,7 @@
 var $mail_ui current = #[['location, 0], ['list, $builder]];
 var $mail_ui subscribed = #[[$builder, [791485891, 0]]];
 var $root created_on = 796268969;
-var $root flags = ['methods, 'code, 'core, 'command_cache, 'variables];
+var $root flags = ['methods, 'code, 'core, 'variables, 'general_cache];
 var $root inited = 1;
 var $root managed = [$builder];
 var $root manager = $builder;
@@ -57,6 +60,231 @@
 var $user password = "*";
 var $user task_connections = #[];
 
+protected method ._interactive_bug_cmd() {
+    var choice, category, bug, list, line;
+    
+    while (choice != 'exit) {
+        choice = .do_menu("Bug Reports", "bug reports", "1=>Scan unclaimed open bugs", "2=>Scan your open bugs", "3=>Scan all open bugs", 'blank, "4=>Scan all repaired bugs", "5=>Scan all non-archived/non-dismissed", 'blank, "6=>Scan dismissed bugs", "7=>Report a new bug", "X=>Exit the Bug Handler", 'exit);
+        switch (choice) {
+            case "1":
+                // Unclaimed bugs:
+                // Create a list of bug obref's to pass to
+                // .scan_bugs():
+                list = [];
+                for category in ($bug_handler.categories()) {
+                    for bug in (category.children()) {
+                        if ((!(bug.owner())) && (!(bug.fixed())))
+                            list = list + [bug];
+                        refresh();
+                    }
+                }
+                .scan_bugs(list.reverse());
+            case "2":
+                // Your bugs:
+                list = [];
+                for category in ($bug_handler.categories()) {
+                    for bug in (category.children()) {
+                        if (((bug.owner()) == this()) && (!(bug.fixed())))
+                            list = [@list, bug];
+                        refresh();
+                    }
+                }
+                .scan_bugs(list.reverse());
+            case "3":
+                // All open bugs:
+                list = [];
+                for category in ($bug_handler.categories()) {
+                    for bug in (category.children()) {
+                        if (!(bug.fixed())) {
+                            list = [@list, bug];
+                            refresh();
+                        }
+                    }
+                }
+                .scan_bugs(list.reverse());
+            case "4":
+                // Scan all closed bugs:
+                list = [];
+                for category in ($bug_handler.categories()) {
+                    for bug in (category.children()) {
+                        if (bug.fixed()) {
+                            list = [@list, bug];
+                            refresh();
+                        }
+                    }
+                }
+                $user_scott.tell(list.to_english());
+                .scan_bugs(list.reverse());
+            case "5":
+                // Scan ALL bugs:
+                list = [];
+                for category in ($bug_handler.categories()) {
+                    for bug in (category.children()) {
+                        list = [@list, bug];
+                        refresh();
+                    }
+                }
+                .scan_bugs(list.reverse());
+    
+                // case "6":
+                // Archived:
+                //    list = $archived_bugs.children();
+                //    .scan_bugs(list.reverse());
+            case "6":
+                // Dismissed:
+                list = $dismissed_bugs.children();
+                .scan_bugs(list.reverse());
+            case "7":
+                // Report a new bug:
+                .report_cmd("", "");
+        }
+    }
+    .tell("Exiting bug reports.");
+    $bug_handler.rehash_unclaimed_tally();
+};
+
+protected method ._passive_bug__add() {
+    arg args, opts;
+    var c, b, w, line, bug;
+    
+    bug = toint(args[1]);
+    
+    // no ticket database that I could find...inefficient this way
+    for c in ($bug_handler.categories()) {
+        for b in (c.children()) {
+            if ((b.ticket_number()) == bug) {
+                w = 1;
+                break;
+            }
+        }
+    }
+    if (!w)
+        return "No bug found with ticket #" + bug;
+    
+    // Append Text:
+    .tell("Append text to bug report #" + bug);
+    line = .read();
+    if (line && (type(line) == 'list)) {
+        b.set_text((b.text()) + ["---", ("Addendum by " + (.name())) + ":", @line]);
+        .tell("Text appended.");
+    } else {
+        .tell("Aborted.");
+    }
+};
+
+protected method ._passive_bug__fix() {
+    arg args, opts;
+    var c, b, w, line, bug;
+    
+    bug = toint(args[1]);
+    
+    // no ticket database that I could find...inefficient this way
+    for c in ($bug_handler.categories()) {
+        for b in (c.children()) {
+            if ((b.ticket_number()) == bug) {
+                w = (b.format()) + ["---"];
+                break;
+            }
+        }
+    }
+    if (!w)
+        return "No bug found with ticket #" + bug;
+    if (b.fixed())
+        return ("Bug #" + bug) + " has already been fixed.";
+    .tell(w);
+    line = .prompt(["[A]bort, do not mark bug as fixed... OR", "Mark bug as fixed, then:", "  [P]aste the bug report to the bug list", "  [C]ompose a message to send to the list", "  [RET] to do nothing"]);
+    if (line == "a") {
+        return "Aborting.";
+    } else if (line == "p") {
+        .bug_fixed("*bug", (.name()) + " has repaired the following bug:", [@$mail_lib.indent_reply(b.forum_format())]);
+    } else if (line == "c") {
+        line = .read();
+        if (line && (type(line) == 'list))
+            .bug_fixed("*bugs", (.name()) + " has repaired the following bug:", [@$mail_lib.indent_reply(b.forum_format())] + line);
+        else
+            return;
+    }
+    b.set_fixed(time());
+    .tell("You have marked this bug as being fixed.");
+};
+
+protected method ._passive_bug__list() {
+    arg args, opts;
+    var c, b, w, line, count, max;
+    
+    w = (.linelen()) - 31;
+    
+    // show any bugs needing to be fixed
+    if (args)
+        max = toint(args[1]);
+    if (max)
+        .tell(max + " unfixed bugs:");
+    else
+        .tell("All unfixed bugs:");
+    for c in ($bug_handler.categories()) {
+        for b in (c.children()) {
+            if (!(b.fixed())) {
+                .tell(strfmt("%4r: %11l %12l %*e", b.ticket_number(), $time.format("%d-%h-%Y", b.date()), (| (b.reporter()).name() |), w, join(b.text())));
+                count++;
+            }
+            refresh();
+            if (max && (count >= max))
+                break;
+        }
+    }
+    .tell(("--- " + count) + " total");
+};
+
+protected method ._passive_bug__view() {
+    arg args, opts;
+    var c, b, w, line, bug;
+    
+    bug = toint(args[1]);
+    
+    // no ticket database that I could find...inefficient this way
+    for c in ($bug_handler.categories()) {
+        for b in (c.children()) {
+            if ((b.ticket_number()) == bug)
+                return (b.format()) + ["---"];
+        }
+    }
+    return "No bug found with ticket #" + bug;
+};
+
+protected method ._passive_bug_cmd() {
+    arg args, opts;
+    var c, b, l, line, w, bug, count;
+    
+    // this is just a quick solution to have a passive interface,
+    // will have to cruft it up more once I have time to dig into
+    // the bug system and learn its nuances.  It is likely not
+    // fully compliant to TEC's bug system--Brandon
+    c = args[1];
+    args = sublist(args, 2);
+    switch (c) {
+        case "a", "add", "addendum":
+            if (!listlen(args))
+                return "No bug specified with '@bug addendum'";
+            return ._passive_bug__add(args, opts);
+        case "l", "list":
+            return ._passive_bug__list(args, opts);
+        case "v", "view":
+            if (!listlen(args))
+                return "No bug specified with '@bug view'";
+            return ._passive_bug__view(args, opts);
+        case "f", "fix":
+            if (!listlen(args))
+                return "No bug specified with '@bug fix'";
+            return ._passive_bug__fix(args, opts);
+        case "h", "help":
+            return "Syntax: @bug [list|view|fix|add?endum] [addtl info]";
+        default:
+            if (c.is_numeric())
+                return ._passive_bug__view([c] + args, opts);
+            return ("Unsupported option '" + c) + "'";
+    }
+};
+
 protected method .attach_cmd() {
     arg cmdstr, cmd, source, prep, dest;
     var exit;
@@ -99,21 +327,6 @@
     (> mail.send(list) <);
 };
 
-protected method .build_attach_exit() {
-    arg exit, source, dest;
-    var line;
-    
-    catch any {
-        exit.attach(source, dest);
-    } with {
-        .tell(("Unable to attach " + (exit.name())) + " because: ");
-        .tell("  " + ((traceback()[1])[2]));
-        line = .prompt("Continue building? ");
-        if (line in ["no", "n"])
-            throw(~abort, "Aborted");
-    }
-};
-
 protected method .build_cleanup() {
     arg @what;
     var obj;
@@ -129,7 +342,7 @@
 
 protected method .build_cmd() {
     arg cmdstr, cmd, args;
-    var dest, source, exits, set, str, i;
+    var dest, source, path, set, str, i;
     
     (> .perms(caller(), 'command) <);
     str = (args[1]).join();
@@ -146,18 +359,12 @@
             .build_cleanup(dest);
             return "** Build Aborted **";
         }
-        exits = (> .build_get_exits(source, dest[1]) <);
-        (> .build_attach_exit(exits[1], source, dest[1]) <);
-        (> .build_attach_exit(exits[2], dest[1], source) <);
+        path = (> .build_get_path(source, dest[1]) <);
     } with {
         if (dest)
             .build_cleanup(dest);
-        if (exits) {
-            if (exits[1])
-                .build_cleanup([exits[1], 1]);
-            if (exits[2])
-                .build_cleanup([exits[2], 1]);
-        }
+        if (path)
+            .build_cleanup([path, 1]);
         if (error() == ~abort)
             return "** Build Aborted **";
         return [(traceback()[1])[2], "** Build Aborted **"];
@@ -173,68 +380,61 @@
     set = #[['named_name, 1]];
     if (dest[2])
         (> (dest[1]).configure(set) <);
-    if (exits[1])
-        (> (exits[1]).configure(set) <);
-    if (exits[2])
-        (> (exits[2]).configure(set) <);
+    if (path)
+        (> path.configure(set) <);
     return "Completed post-configuration.";
 };
 
-protected method .build_generate_exit() {
-    arg pname, source, dest;
-    var parent, exit, name;
-    
-    name = pname[1];
-    [parent, exit] = (> .build_parse_name(name[1], $exit) <);
-    name = replace(name, 1, exit);
-    pname = replace(pname, 1, name);
-    exit = (| source.match_environment(exit) |);
-    if (exit) {
-        if (exit.is($exit))
-            throw(~stop, (((name[1]) + " is already an exit from ") + (source.name())) + ".");
-        if (exit.source())
-            throw(~stop, (exit.namef('ref)) + " is alread linked.");
-        return exit;
+protected method .build_generate_path() {
+    arg source, dest, spname, @dpname;
+    var parent, path, sname, dname, line;
+    
+    sname = spname[1];
+    [parent, path] = (> .build_parse_name(sname[1], $path) <);
+    sname = replace(sname, 1, path);
+    spname = replace(spname, 1, sname);
+    path = (| source.match_environment(path) |);
+    if (path) {
+        if (path.is($path))
+            throw(~stop, (((sname[1]) + " is already a path from ") + (source.name())) + ".");
+        if (path.source(dest))
+            throw(~stop, (path.namef('ref)) + " is alread linked.");
+    }
+    if (dpname) {
+        [dpname] = dpname;
+        dname = dpname[1];
+        [parent, path] = (> .build_parse_name(dname[1], $path) <);
+        dname = replace(dname, 1, path);
+        dpname = replace(dpname, 1, dname);
+        path = (| dest.match_environment(path) |);
+        if (path) {
+            if (path.is($path))
+                throw(~stop, (((dname[1]) + " is already a path from ") + (dest.name())) + ".");
+            if (path.source(source))
+                throw(~stop, (path.namef('ref)) + " is alread linked.");
+        }
     }
+    if (!path) {
     catch any
-        exit = (> parent.new() <);
+            path = (> parent.new() <);
     with
-        throw(~stop, "Unable to create exit: " + ((traceback()[1])[2]));
-    return .build_set_name(exit, @pname);
-};
-
-protected method .build_get_exits() {
-    arg source, dest;
-    var eleave, earrive, opp, t;
-    
-    // Get the exits
-    catch any {
-        eleave = (> .build_query_exit(source, dest) <);
-        if (eleave) {
-            // try really hard to figure this out
-            if (!(opp = $place_lib.opposite_direction(eleave.name()))) {
-                for t in (eleave.name_templates()) {
-                    t = strsed(t, "[^a-z]+", "", "g");
-                    if ((opp = $place_lib.opposite_direction(eleave.name())))
-                        break;
-                }
-            }
-            if (opp) {
-                opp = strsed(explode(opp, "|")[1], "[^a-z]+", "", "g");
-                earrive = (> .build_query_exit(dest, source, opp) <);
-            } else {
-                earrive = (> .build_query_exit(dest, source) <);
+            throw(~stop, "Unable to create path: " + ((traceback()[1])[2]));
             }
+    catch any {
+        path.attach(source, dest);
+        .build_set_name(path, @spname, source);
+        if (dpname) {
+            path.attach(dest, source);
+            .build_set_name(path, @dpname, dest);
         }
     } with {
-        if (eleave) {
-            .build_cleanup([eleave, 1]);
-            if (earrive)
-                .build_cleanup([earrive, 1]);
-        }
-        rethrow(error());
+        .tell(("Unable to attach " + (path.name())) + " because: ");
+        .tell("  " + ((traceback()[1])[2]));
+        line = .prompt("Continue building? ");
+        if (line in ["no", "n"])
+            throw(~abort, "Aborted");
     }
-    return [eleave, earrive];
+    return path;
 };
 
 protected method .build_get_location() {
@@ -305,6 +505,9 @@
     // set the realm
     dest.set_setting_realm($place, "realm", realm);
     
+    // add this room to realm's 'local' variable
+    realm.add_local(dest);
+    
     // okee, done
     return [dest, 1];
 };
@@ -322,6 +525,47 @@
     return out;
 };
 
+protected method .build_get_path() {
+    arg source, dest;
+    var eleave, earrive, opp, t, path;
+    
+    // Get the exits
+    // catch any {
+    while (!path) {
+        eleave = (> .build_query_exit(source, dest) <);
+        if (eleave) {
+            // try really hard to figure this out
+            if (!(opp = $place_lib.opposite_direction((eleave[1])[1]))) {
+                for t in (eleave[2]) {
+                    t = strsed(t, "[^a-z]+", "", "g");
+                    if ((opp = $place_lib.opposite_direction(t)))
+                        break;
+                }
+            }
+            if (opp) {
+                opp = strsed(explode(opp, "|")[1], "[^a-z]+", "", "g");
+                earrive = (> .build_query_exit(dest, source, opp) <);
+            } else {
+                earrive = (> .build_query_exit(dest, source) <);
+            }
+        }
+    
+        //} with {
+        //    if (eleave) {
+        //        .build_cleanup([eleave, 1]);
+        //        if (earrive)
+        //            .build_cleanup([earrive, 1]);
+        //    }
+        //    rethrow(error());
+        //}
+        catch any
+            path = .build_generate_path(source, dest, eleave, earrive);
+        with
+            .tell((traceback()[1])[2]);
+    }
+    return path;
+};
+
 protected method .build_hint() {
     arg n;
     
@@ -386,19 +630,20 @@
     } else {
         line += ": ";
     }
-    while (!exit) {
+    while (!name) {
         catch ~skip
             name = (> .build_get_name(line, def) <);
         with
             return 0;
         if (((name[1])[1]) == "@none")
             return 0;
-        catch any
-            exit = (> .build_generate_exit(name, source, dest) <);
-        with
-            .tell((traceback()[1])[2]);
+    
+        //    catch any
+        //        exit = (> .build_create_and_attach_exit(name, source, dest) <);
+        //    with
+        //        .tell(traceback()[1][2]);
     }
-    return exit;
+    return name;
 };
 
 protected method .build_query_realm() {
@@ -427,18 +672,18 @@
 };
 
 protected method .build_set_name() {
-    arg obj, name, templates;
+    arg obj, name, templates, @args;
     var t, x;
     
     catch any {
-        obj = obj.set_name(@name);
+        obj = obj.set_name(@name, @args);
     } with {
         .tell("Unable to set name; " + ((traceback()[1])[2]));
         .tell("Setting name as " + (obj.objname()));
         obj = obj.set_name(tostr(obj.objname()));
     }
     for t in (templates)
-        obj = obj.add_name_template(t);
+        obj = obj.add_name_template(t, @args);
     return obj;
 };
 
@@ -559,7 +804,7 @@
             if (valid(obj))
                 .tell(("Unable to destroy " + name) + " immediately.");
             else
-                .tell(("Sucessfully destroyed " + name) + ".");
+                .tell(("Successfully destroyed " + name) + ".");
         } with {
             return (traceback()[1])[2];
         }
@@ -568,7 +813,7 @@
 
 public method .dig_cmd() {
     arg cmdstr, cmd, args;
-    var m, syn, name, dest, dnew, parent, name, lname, aname, leave, arrive, loc;
+    var m, syn, name, dest, dnew, parent, name, dname, lname, arrive, aname, path, loc;
     
     (> .perms(caller(), 'command) <);
     syn = ["Syntax: `@dig <new place>` OR", "        `@dig <leaving exit>[;<arriving exit>] to <objref or new place>`", "You may also want to try @build."];
@@ -578,7 +823,7 @@
     
     // are they essentially just @spawn'ing?
     if (!(m = match_template(args, "* to *"))) {
-        if ((args[1]) == "$")
+        if (match_regexp(args, "^\$[a-z0-9_]+$"))
             return syn;
         if (!(name = (> $code_lib.parse_name(args) <)))
             return "Invalid name.";
@@ -599,12 +844,13 @@
     
     // do some basic parsing before we needlessly create anything
     [args, m, name] = m;
-    [lname, (aname ?= "")] = split(args, " *; *");
+    [lname, (aname ?= "")] = split(args, " *[|;] *");
     if ((!lname) || (!name))
         return syn;
     
     // create or parse the destination first
-    if ((name[1]) == "$") {
+    name = name.trim();
+    if (match_regexp(name, "^\$[a-z0-9_]+$")) {
         if (!(dest = (| lookup(tosym(substr(name, 2))) |)))
             return "Invalid object name.";
         if (!(dest.is($place)))
@@ -628,31 +874,61 @@
     // first the leaving exit..
     if (!(name = (| $code_lib.parse_name(lname) |)))
         return ("Invalid exit name '" + lname) + "'";
-    catch ~stop {
-        leave = (> .build_generate_exit(name, loc, dest) <);
-        (> .build_attach_exit(leave, loc, dest) <);
-        .tell((("Attached exit " + (leave.name())) + " from ") + (loc.name()));
-    } with {
-        .tell((traceback()[1])[2]);
-        return .build_cleanup([dest, dnew]);
+    
+    //catch ~stop {
+    //    leave = (> .build_create_and_attach_exit(name, loc, dest) <);
+    //
+    // (> .build_attach_exit(leave, loc, dest) <);
+    //    .tell("Attached exit " + leave.name() + " from " + loc.name());
+    //} with {
+    //    .tell(traceback()[1][2]);
+    //    return .build_cleanup([dest, dnew]);
+    //}
+    // see if they want a return exit, if they didn't say anything
+    aname = aname.trim();
+    if (!aname) {
+        if (!(dname = $place_lib.opposite_direction(lname)))
+            dname = lname;
+        arrive = (.prompt(("Specify return exit, or 'none' for no return exit [" + dname) + "] ")).trim();
+        if (!arrive)
+            aname = dname;
+        else if (arrive != "none")
+            aname = strsub(arrive, "|", ",");
     }
     
     // now the (optional) arrival exit
     if (aname) {
-        if (!(name = (| $code_lib.parse_name(aname) |)))
+        if (!(dname = (| $code_lib.parse_name(aname) |)))
             return ("Invalid exit name '" + cname) + "'";
+    
+        //    catch ~stop {
+        //       arrive = (> .build_create_and_attach_exit(name, dest, loc) <);
+        // (> .build_attach_exit(arrive, dest, loc) <);
+        //        .tell("Attached exit " + arrive.name() + " from " + dest.name());
+        //    } with {
+        //        .tell(traceback()[1][2]);
+        // thirty second leeway guess to if we created it or not
+        // ... what I do to keep from wrapping
+        //        dnew = dnew.or(leave.created_on() > time() - 30 ? 2 : 0);
+        //        return .build_cleanup([dest, dnew.and(1)], [leave, dnew.and(2)]);
+        //    }
+    }
         catch ~stop {
-            arrive = (> .build_generate_exit(name, dest, loc) <);
-            (> .build_attach_exit(arrive, dest, loc) <);
-            .tell((("Attached exit " + (arrive.name())) + " from ") + (dest.name()));
+        if (aname) {
+            path = (> .build_generate_path(loc, dest, name, dname) <);
+    
+            // (> .build_attach_exit(arrive, dest, loc) <);
+        } else {
+            path = (> .build_generate_path(loc, dest, name) <);
+        }
+        .tell((("Attached way " + (path.name())) + " from ") + (loc.name()));
         } with {
             .tell((traceback()[1])[2]);
     
             // thirty second leeway guess to if we created it or not
             // ... what I do to keep from wrapping
-            dnew = dnew.or(((leave.created_on()) > (time() - 30)) ? 2 : 0);
-            return .build_cleanup([dest, dnew.and(1)], [leave, dnew.and(2)]);
-        }
+        dnew = dnew.or((path && ((path.created_on()) > (time() - 30))) ? 2 : 0);
+        return .build_cleanup([dest, dnew.and(1)], [path, dnew.and(2)]);
     }
 };
 
@@ -766,23 +1042,11 @@
                 .tell("Append text to report...");
                 junk = .read();
                 if (junk && (junk != 'aborted)) {
-                    bug.set_text((bug.text()) + ["----------------------------------------------------------------------------", ("Addendum by " + (.name())) + ":", @junk]);
+                    bug.set_text((bug.text()) + ["---", ("Addendum by " + (.name())) + ":", @junk]);
                     .tell("Text appended.");
                 } else {
                     .tell("Aborted.");
                 }
-    
-                // case "A":
-                //     // Archive
-                //     if (.is($admin)) {
-                //         if (bug.fixed()) {
-                //             bug.chparents($archived_bugs);
-                //             .tell("Bug archived.");
-                //         } else {
-                //             .tell("You may only archive repaired bugs.");
-                //             choice = 'no_scroll;
-                //        }
-                //     }
             case "D":
                 // Dismiss
                 .tell("Enter a description of the dismissal:");
@@ -816,6 +816,7 @@
                     str = .prompt("forum, [C]ompose a message to sent there, [RET] to do nothing, or e[X]it: ");
                     if (str == "P") {
                         .bug_fixed("*bug", (.name()) + " has repaired the following bug:", [@$mail_lib.indent_reply(bug.forum_format())]);
+                        bug.set_fixed(time());
                     } else if (str == "C") {
                         junk = .read();
                         if (junk && (type(junk) == 'list)) {
diff -rwu ColdCore-3.0a9.02/src/channel_ui.cdc ColdCore-3.0a10/src/channel_ui.cdc
--- ColdCore-3.0a9.02/src/channel_ui.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/channel_ui.cdc	Sat Mar 14 15:49:04 1998
@@ -5,6 +5,9 @@
 var $channel_ui channel_creation = 1;
 var $channel_ui channel_dict = #[];
 var $channel_ui credits = ["Chuck and Brad"];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@desc-c?hannel", [["@desc-c?hannel", "* as *", "@desc-c?hannel <any> as <any>", 'describe_channel_cmd, #[[1, ['any, []]], [3, ['any, []]]]]]],\
   ["@join-lock-channel|@jlc",\
@@ -28,7 +31,7 @@
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
 var $root created_on = 838251646;
-var $root flags = ['variables, 'methods, 'code, 'command_cache, 'fertile, 'core];
+var $root flags = ['variables, 'methods, 'code, 'fertile, 'core, 'general_cache];
 var $root inited = 1;
 var $root managed = [$channel_ui];
 var $root manager = $channel_ui;
@@ -38,7 +41,7 @@
     arg channel, message;
     var q;
     
-    if (!(caller() in [$channel_ui, $user, $sys]))
+    if (!(caller() in [$channel_ui, $user, $sys, $guest]))
         throw(~perm, "You are not allowed to call $channel_ui._broadcast() directly");
     for q in ($user_db.connected())
         q.channel_msg(channel, message);
@@ -131,7 +134,10 @@
             (> .channel_moderator_ok() <);
             message = msg.subrange(2);
         default:
-            message = (spammer_name + ": ") + msg;
+            message = msg ? ($code_lib.punctuation_type(msg)) : "say";
+            message = ((((spammer_name + " ") + message) + "s, \"") + msg) + "\"";
+    
+            // message = spammer_name + ": " + msg;
     }
     ._broadcast(channel, message);
 };
@@ -168,7 +174,7 @@
             return ((("You un-" + modestr) + "lock channel ") + (db[1])) + ".";
         } else {
             catch ~objnf, ~parse {
-                lock = $lock_parser.parse(str, sender());
+                lock = $lock_frob.parse(str, sender());
                 $channel_db.value_changed(channel, db.replace(mode, lock));
                 return ((((("You " + modestr) + "lock channel ") + (db[1])) + " with ") + (lock.lock_name('thing))) + ".";
             } with {
@@ -429,7 +429,7 @@
     msg = ("Channel alias " + args) + " deleted.";
     if (!args)
         return ("Syntax: " + cmd) + " <channel>";
-    dict_var = channel_dict[args];
+    dict_var = (| channel_dict[args] |);
     channel = (| (((channel_dict[args]).to_string()).lowercase()).to_symbol() |) || 0;
     if (type(channel) == 'symbol) {
         db = (| $channel_db.search(channel) |) || 0;
diff -rwu ColdCore-3.0a9.02/src/climate.cdc ColdCore-3.0a10/src/climate.cdc
--- ColdCore-3.0a9.02/src/climate.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/climate.cdc	Sat Mar 14 15:49:09 1998
@@ -1,9 +1,10 @@
 
 new object $climate: $has_commands, $weather_system;
 
-var $climate daylengths = 0;
-var $climate seasons = 0;
-var $climate weathers = 0;
+var $climate daylengths = [];
+var $climate realm = $realm_of_creation;
+var $climate seasons = [];
+var $climate weathers = #[];
 var $has_commands local = #[];
 var $has_commands remote = #[["@list-climate", [["@list-climate", "*", "@list-climate <this>", 'show_cmd, #[[1, ['this, []]]]]]], ["@setup", [["@setup", "* seasons * daylengths *", "@setup <this> seasons <any> daylengths <any>", 'setup_cmd, #[[1, ['this, []]], [3, ['any, []]], [5, ['any, []]]]]]], ["@add-weather", [["@add-weather", "* type * prob?abilities *", "@add-weather <this> type <descendant of $weather> prob?abilities <any>", 'add_weather_cmd, #[[1, ['this, []]], [3, ['descendant, [$weather]]], [5, ['any, []]]]]]], ["@del-weather", [["@del-weather", "* type *", "@del-weather <this> type <descendant of $weather>", 'del_weather_cmd, #[[1, ['this, []]], [3, ['descendant, [$weather]]]]]]]];
 var $has_commands shortcuts = #[];
@@ -43,7 +44,7 @@
     arg current, season, dependancies;
     var dists, i, w, d, fuzz;
     
-    fuzz = 10;
+    fuzz = 3;
     dists = ._probabilities(current, season, fuzz);
     dists = dists.sort(dists.slice(2));
     for i in (dependancies) {
@@ -97,6 +98,10 @@
     throw(~keynf, "No such weather in this climate.");
 };
 
+public method .realm() {
+    return realm;
+};
+
 public method .setup_cmd() {
     arg cmdstr, cmd, this, p, vals, p, dls;
     var s, line, attrs, att2, extras, ex2, i;
@@ -110,9 +110,16 @@
 
 public method .show_cmd() {
     arg cmdstr, cmd, this;
-    var out, x, i;
+    var out, x, i, hdr;
     
-    return ((map i in (weathers) to ([(i[1]).name(), @i[2]]).transpose()).tabulate([["Weather type", "------------"], @map i in (seasons) to ([i, "".pad(i.length(), "-")])])) + ["---"];
+    if (definer() == this())
+        return "The base climate object does not define anything--refer to its children.";
+    hdr = [];
+    for x in [1 .. listlen(seasons)] {
+        i = (((seasons[x]) + " (") + (daylengths[x])) + ")";
+        hdr += [[i, pad("", strlen(i), "-")]];
+    }
+    return ((map i in (weathers) to ([(i[1]).name(), @i[2]]).transpose()).tabulate([["Weather type", "------------"]] + hdr)) + ["---"];
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/cml_color.cdc ColdCore-3.0a10/src/cml_color.cdc
--- ColdCore-3.0a9.02/src/cml_color.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/cml_color.cdc	Sat Mar 14 15:49:03 1998
@@ -14,7 +14,8 @@
     
     out = ["COLOR        RGB     ANSI"];
     for c in (colors)
-        out += [strfmt("%12 #%6l %3l", c[1], @c[2])];
+        out += [strfmt("%12s #%6l %3l", c[1], @c[2])];
+    return out;
 };
 
 public method .get_color() {
diff -rwu ColdCore-3.0a9.02/src/cml_lib.cdc ColdCore-3.0a10/src/cml_lib.cdc
--- ColdCore-3.0a9.02/src/cml_lib.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/cml_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -16,6 +16,12 @@
     return br;
 };
 
+public method .format_dfn_tag() {
+    arg args;
+    
+    return (<$format, ["dfn", [], [args], 'do_dfn]>);
+};
+
 public method .format_hr_tag() {
     return hr;
 };
@@ -27,12 +27,15 @@
 };
 
 public method .format_obj_tag() {
-    arg context, object, name, @options;
+    arg context, object, name, @args;
+    var opt, src;
     
-    if (options)
-        return (<$format, ["obj", [["context", context], ["options", options[1]], ["name", name]], [object], 'do_obj]>);
-    else
+    if (args) {
+        [opt, (src ?= sender())] = args;
+        return (<$format, ["obj", [["context", context], ["name", name], ["options", opt]], [object, src], 'do_obj]>);
+    } else {
         return (<$format, ["obj", [["context", context], ["name", name]], [object], 'do_obj]>);
+    }
 };
 
 public method .format_p_tag() {
diff -rwu ColdCore-3.0a9.02/src/code_lib.cdc ColdCore-3.0a10/src/code_lib.cdc
--- ColdCore-3.0a9.02/src/code_lib.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/code_lib.cdc	Sat Mar 14 15:49:02 1998
@@ -1,7 +1,7 @@
 
 new object $code_lib: $libraries;
 
-var $code_lib quotes = [["\"Abandon all hope, ye who enter here.\""], ["\"Pull out Wedge, your not doing any more good back there.\"", "", "- Luke Skywalker, StarWars"], ["\"God is in the details.\""], ["\"I don't practice what I preach,", "because I'm not the type of person I'm preaching too.\"", "", "- Bob Dobbs"], ["\"I haven't shaved for six years.", "I seem to be cursed with a thin beard.\"", "", "- Calvin, Age 6 (of Calvin & Hobbes)"], ["\"I may be a Dreamer, but I'm not the only one.\"", "", "- John Lennon"], ["\"C code.  C code run.  Run, Code, Run!  Please!?\"", "", "- Anonymous C hacker."], ["\"They who dream by day are cognizant of many things", "which escape those who dream only by night.\"", "", "- Edgar Allan Poe"], ["\"The good die first,", "and they whose hearts are dry as a summer dust", "burn to the socket.\"", "", "- William Wordsworth"], ["\"Banning guns to prevent murder", "is like banning word processors to prevent libel.\"", "", "- Unknown"], ["\"You will not be punished for your anger,", "you will be punished by your anger.\"", "", "- Buddha"], ["What part of:", "", "main() { printf(&unix[\"021%six0120\"],(unix)[\"have\"]+\"fun\"-0x60);}", "", "do you not understand?", "", "(taken from the 1987 Obfuscated C Code Contest)"], ["\"The goal of computer science is to build something that will", "last at least until we've finished building it.\""], ["\"Give me ambiguity or give me something else.\""], ["\"We are born naked, wet and hungry. Then things get worse.\""], ["\"Make it idiot proof and someone will make a better idiot.\""], ["\"Lottery: A tax on people who are bad at math.\""], ["\"There's too much blood in my caffeine system.\""], ["\"Artificial Intelligence usually beats real stupidity.\""], ["\"Ever notice how fast MS-Windows runs? Neither did I.\""], ["\"Very funny, Scotty. Now beam down my clothes.\""], ["\"Consciousness: that annoying time between naps.\""], ["\"The gene pool could use a little chlorine.\""], ["\"When there's a will, I want to be in it.\""], ["\"Change is inevitable, except from a vending machine.\""], ["\"MS-Windows is a virus:", "it takes over your computer and makes it run bad.\""], ["\"I have not failed 10,000 times,", "I have sucessfully found 10,000 ways that do not work.\"", "- Thomas Edison"], ["\"The difference between literature and journalism is", "that journalism is unreadable and literature is not read.\"", "", "- Oscar Wilde (1854-1900)"], ["\"The man who reads nothing at all is better educated", "than the man who reads nothing but newspapers.\"", "", "- Thomas Jefferson (1743-1826)"], ["\"In the mind of the beginner, there are many possibilities.", "In the mind of the expert there are few.\"", "", "- Shunryu Suzuki"], ["\"Time is a great teacher, but unfortunately it kills all of its pupils.\"", "", "- Hector Berlioz"], ["\"After I'm dead I'd rather have people ask", "why I have no monument, than why I have one.\"", "", "- Cato the Elder (234-249 B.C.)"], ["\"I loathe people who keep dogs. They are cowards who haven't", "got the guts to bite people themselves.\"", "", "-August Strindberg"], ["\"By the time I'd grown up, I natrually supposed that I'd be grown up.\"", "", "-Eve Babitz"], ["\"Every place has a spirit:", "it may be good, it may be bad", "it can be restful as eternity.", "This place-spirit can inhabit a book, a house, a town, a valley;", "the nature of the spirits is they remain.\"", "", "- William S. Burroughs"], ["\"I have never been lost... but I will admit to being confused for several weeks.\"", "", "- Daniel Boon"], ["Time is what keeps things from happening all at once."], ["According to my calculations the problem doesn't exist."], ["Forget about World Peace ... visualize using your turn signal."], ["Ever stop to think, and forget to start again?"], ["Diplomacy is the art of saying \"nice doggie!\"...till you can find a rock."], ["\"The sign of growing up is being able to form independent opinions,", "The sign of maturity is knowing when they are not wanted.\""]];
+var $code_lib quotes = [["\"Abandon all hope, ye who enter here.\""], ["\"Pull out Wedge, your not doing any more good back there.\"", "", "- Luke Skywalker, StarWars"], ["\"God is in the details.\""], ["\"I don't practice what I preach,", "because I'm not the type of person I'm preaching too.\"", "", "- Bob Dobbs"], ["\"I haven't shaved for six years.", "I seem to be cursed with a thin beard.\"", "", "- Calvin, Age 6 (of Calvin & Hobbes)"], ["\"I may be a Dreamer, but I'm not the only one.\"", "", "- John Lennon"], ["\"C code.  C code run.  Run, Code, Run!  Please!?\"", "", "- Anonymous C hacker."], ["\"They who dream by day are cognizant of many things", "which escape those who dream only by night.\"", "", "- Edgar Allan Poe"], ["\"The good die first,", "and they whose hearts are dry as a summer dust", "burn to the socket.\"", "", "- William Wordsworth"], ["\"Banning guns to prevent murder", "is like banning word processors to prevent libel.\"", "", "- Unknown"], ["\"You will not be punished for your anger,", "you will be punished by your anger.\"", "", "- Buddha"], ["What part of:", "", "main() { printf(&unix[\"021%six0120\"],(unix)[\"have\"]+\"fun\"-0x60);}", "", "do you not understand?", "", "(taken from the 1987 Obfuscated C Code Contest)"], ["\"The goal of computer science is to build something that will", "last at least until we've finished building it.\""], ["\"Give me ambiguity or give me something else.\""], ["\"We are born naked, wet and hungry. Then things get worse.\""], ["\"Make it idiot proof and someone will make a better idiot.\""], ["\"Lottery: A tax on people who are bad at math.\""], ["\"There's too much blood in my caffeine system.\""], ["\"Artificial Intelligence usually beats real stupidity.\""], ["\"Ever notice how fast MS-Windows runs? Neither did I.\""], ["\"Very funny, Scotty. Now beam down my clothes.\""], ["\"Consciousness: that annoying time between naps.\""], ["\"The gene pool could use a little chlorine.\""], ["\"When there's a will, I want to be in it.\""], ["\"Change is inevitable, except from a vending machine.\""], ["\"MS-Windows is a virus:", "it takes over your computer and makes it run bad.\""], ["\"I have not failed 10,000 times,", "I have sucessfully found 10,000 ways that do not work.\"", "- Thomas Edison"], ["\"The difference between literature and journalism is", "that journalism is unreadable and literature is not read.\"", "", "- Oscar Wilde (1854-1900)"], ["\"The man who reads nothing at all is better educated", "than the man who reads nothing but newspapers.\"", "", "- Thomas Jefferson (1743-1826)"], ["\"In the mind of the beginner, there are many possibilities.", "In the mind of the expert there are few.\"", "", "- Shunryu Suzuki"], ["\"Time is a great teacher, but unfortunately it kills all of its pupils.\"", "", "- Hector Berlioz"], ["\"After I'm dead I'd rather have people ask", "why I have no monument, than why I have one.\"", "", "- Cato the Elder (234-249 B.C.)"], ["\"I loathe people who keep dogs. They are cowards who haven't", "got the guts to bite people themselves.\"", "", "-August Strindberg"], ["\"By the time I'd grown up, I natrually supposed that I'd be grown up.\"", "", "-Eve Babitz"], ["\"Every place has a spirit:", "it may be good, it may be bad", "it can be restful as eternity.", "This place-spirit can inhabit a book, a house, a town, a valley;", "the nature of the spirits is they remain.\"", "", "- William S. Burroughs"], ["\"I have never been lost... but I will admit to being confused for several weeks.\"", "", "- Daniel Boon"], ["Time is what keeps things from happening all at once."], ["According to my calculations the problem doesn't exist."], ["Forget about World Peace ... visualize using your turn signal."], ["Ever stop to think, and forget to start again?"], ["Diplomacy is the art of saying \"nice doggie!\"...till you can find a rock."], ["\"The sign of growing up is being able to form independent opinions,", "The sign of maturity is knowing when they are not wanted.\""], ["\"Microsoft seems hell-bent on repeating very many of the problems", "originally suffered by Unix almost 20 years ago.\"", "", "-Unknown"]];
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
 var $root inited = 1;
@@ -33,7 +33,7 @@
 };
 
 public method ._do_method_href() {
-    arg method, object;
+    arg method, object, options;
     var mod_method, prefix, postfix, index;
     
     prefix = "";
@@ -47,8 +47,10 @@
         method = method.subrange(2);
     }
     postfix = "(";
+    if (options)
+        options = (options.mmap('join, "=")).join("&");
     method = method.subrange(1, (method.length()) - 1);
-    return (((((((prefix + "<A HREF=\"/bin/method?target=") + object) + ".") + method) + "\">") + method) + "</A>") + postfix;
+    return (((((((((prefix + "<A HREF=\"/bin/method?target=") + object) + ".") + method) + "()") + (options ? ("&" + options) : "")) + "\">") + method) + "</A>") + postfix;
 };
 
 public method ._profile_listing() {
@@ -82,7 +84,7 @@
     }
     max = 0.01 * (t - start);
     out = map i in (times.keys()) to (refresh() && [i.chop(50), times[i], (times[i]) / max, sums[i], (sums[i]) / max]);
-    out = out.sort(map i in (out) to (-(i[2])));
+    out = out.sort(map i in (out) to (refresh() && (-(i[2]))));
     out = map i in (out) to (strfmt("%50l%7r%6.1r%%%7r%6.1r%%", @i));
     out = head + out;
     return out;
@@ -166,7 +168,7 @@
 };
 
 public method .code_to_html() {
-    arg code, object;
+    arg code, object, options;
     var line, object_parse, results, obj_regexp, meth_regexp, chunk, word, method_parse, last_word, mode, chunk_out, meth_r2;
     
     obj_regexp = "\$[a-zA-Z0-9_]+";
@@ -174,18 +176,21 @@
     meth_r2 = "^(\.[a-zA-Z0-9_]+\()(.*)$";
     results = [];
     for line in (code) {
+        if (match_regexp(line, "^ *//")) {
+            results += [("<font color=\"#a0a0a0\">" + line) + "</font>"];
+        } else {
         object_parse = line.global_regexp(obj_regexp);
         last_word = 0;
         chunk_out = "";
         while (object_parse) {
             [chunk, (word ?= 0), @object_parse] = object_parse;
             if (last_word && (method_parse = chunk.regexp(meth_r2))) {
-                chunk_out += ._do_method_href(method_parse[1], last_word);
+                    chunk_out += ._do_method_href(method_parse[1], last_word, options);
                 chunk = method_parse[2];
             }
             method_parse = chunk.global_regexp(meth_regexp);
             mode = 0;
-            chunk_out += map chunk in (method_parse) to ((mode = !mode) ? chunk : (._do_method_href(chunk, object))).join("");
+                chunk_out += map chunk in (method_parse) to ((mode = !mode) ? chunk : (._do_method_href(chunk, object, options))).join("");
             if (word) {
                 last_word = word;
                 if ((| $object_lib.to_dbref(word) |))
@@ -196,6 +201,7 @@
         }
         results += [chunk_out + (object_parse.join(""))];
     }
+    }
     return results;
 };
 
@@ -250,6 +256,8 @@
     // used to parse $has_name names and name templates
     [name, flag] = $parse_lib.opt(name, "u?nique", "p?roper", "n?ormal", "i?gnore");
     name = name.join();
+    
+    // Parse +prop +norm +uniq and +ignore flags
     if (flag) {
         def = [@def, ["p?roper", "p", 1, ""]][1];
         flag = (| flag.last() |) || def;
@@ -265,9 +273,14 @@
                 case "p?roper":
                     type = 'prop;
             }
+            article = type;
         }
+    } else {
+        article = 'prop;
     }
     [name, @tmps] = name.split(" *, *");
+    
+    // Check to see if the name already has articles in it.
     if (!ignore) {
         if ((match = name.regexp("^the +(.*)$"))) {
             article = 'uniq;
@@ -275,9 +288,9 @@
         } else if ((match = name.regexp("^(a|an) +(.*)$"))) {
             article = 'normal;
             name = match[2];
-        } else {
-            article = 'prop;
         }
+    
+        // Complain if the flag does not agree with the given article
         if (type && (article != type))
             throw(~article, (("Conflicting name types " + type) + " and ") + article);
     }
@@ -293,7 +306,7 @@
 
 public method .punctuation_type() {
     arg str;
-    var end;
+    var end, offset, noses;
     
     end = str.length();
     switch (str[end]) {
@@ -305,10 +318,14 @@
             return "say";
         case ")":
             if (end > 1) {
-                switch (str[end - 1]) {
+                if ((end > 2) && ((str[end - 1]) == "-"))
+                    offset = 2;
+                else
+                    offset = 1;
+                switch (str[end - offset]) {
                     case ";":
                         return "wink";
-                    case ":":
+                    case ":", "=":
                         return "smile";
                     case "8":
                         return "grin";
@@ -317,9 +334,15 @@
                 }
             }
         case "(":
-            if ((end > 1) && ((str[end - 1]) in [":", "8"]))
+            if (end > 1) {
+                if ((end > 2) && ((str[end - 1]) == "-"))
+                    offset = 2;
+                else
+                    offset = 1;
+                if ((str[end - offset]) in ["=", "8", ":"])
                 return "frown";
     }
+    }
     return "say";
 };
 
@@ -453,6 +453,23 @@
     arg str;
     
     return !match_regexp(str, "[^a-z0-9-]");
+};
+
+public method .valid_name() {
+    arg name, type;
+    
+    if (!(type in ['prop, 'normal, 'uniq]))
+        throw(~invarg, "Type must be one of: 'prop, 'normal or 'uniq");
+    if ("\\" in name)
+        throw(~invname, "Names cannot include backslashes.");
+    if (name && ((name[1]) in ["$", "#"]))
+        throw(~invname, "Names cannot begin with \"$\" or \"#\".");
+    if (type(name) != 'string)
+        throw(~type, "New name must be given as a string.");
+    if ((type != 'prop) && (name.match_regexp("^(a|an|the) +")))
+        throw(~bad_name, "Articles included in unique or normal name.");
+    if (!(type in ['prop, 'normal, 'uniq]))
+        throw(~invarg, "Type must be one of: 'prop, 'normal or 'uniq");
 };
 
 public method .valid_setting_id() {
diff -rwu ColdCore-3.0a9.02/src/command_aliases.cdc ColdCore-3.0a10/src/command_aliases.cdc
--- ColdCore-3.0a9.02/src/command_aliases.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/command_aliases.cdc	Sat Mar 14 15:49:04 1998
@@ -2,6 +2,9 @@
 new object $command_aliases: $user_interfaces;
 
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/command_cache.cdc ColdCore-3.0a10/src/command_cache.cdc
--- ColdCore-3.0a9.02/src/command_cache.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/command_cache.cdc	Sat Mar 14 15:49:04 1998
@@ -1,371 +1,299 @@
 
 new object $command_cache: $has_commands;
 
-var $command_cache interfaces = 0;
-var $command_cache local_cache = 0;
-var $command_cache remote_cache = 0;
-var $command_cache shortcut_cache = 0;
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
-var $root created_on = 796605573;
-var $root fertile = 1;
-var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
+var $root created_on = 874602916;
+var $root defined_settings = #[["command-modules", #[['get, ['command_modules]], ['set, ['set_command_modules]], ['parse, ['parse_itemlist, 'parse_command_module]], ['format, ['format_itemlist]]]]];
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root help_node = $help_obj_command_cache;
 var $root inited = 1;
 var $root managed = [$command_cache];
 var $root manager = $command_cache;
 
-public method .add_command_interface() {
-    arg interface;
+public method .add_command_module() {
+    arg module;
     
-    if (!(interface.has_flag('command_cache)))
-        throw(~perm, ("Command interface " + interface) + " is not setup as a cache.");
-    interfaces = setadd(interfaces || [], interface);
-    interface.interface_link();
+    (> .perms(sender()) <);
+    if (!('general_cache in (module.flags())))
+        throw(~notcache, module + " is not marked as a general_cache");
+    modules = setadd(modules || [], module);
+    module.cache_server_init();
 };
 
-private method .add_object_to_local_cache() {
-    arg obj;
-    var info, thing, element, part;
+protected method .add_to_cache() {
+    arg command, definer;
+    var part, cmd;
     
-    info = (| obj.all_local_commands() |);
-    if (info) {
-        for element in (info) {
-            for part in (element[2])
-                .add_to_local_cache(part[1]);
-        }
-    }
+    if (type(commands) != 'dictionary)
+        commands = #[];
+    cmd = command.word(1);
+    for part in (cmd.explode_template_word())
+        commands = commands.setadd_elem(part, [cmd, definer]);
 };
 
-public method .add_object_to_remote_cache() {
-    arg obj;
-    var info, thing, element, part;
+public method .cache_client_init() {
+    var p;
     
-    info = (| obj.all_remote_commands() |);
-    if (info) {
-        for element in (info) {
-            for part in (element[2])
-                .add_to_remote_cache(part[1], element[1]);
-        }
-    }
+    if (sender() != this())
+        (> .perms(sender(), 'system) <);
+    modules ?= [];
+    for p in (([this()] + parents()) + modules)
+        (| p.cache_server_init() |);
 };
 
-protected method .add_to_local_cache() {
-    arg command;
-    var part, cmd;
+protected method .cache_client_uninit() {
+    var p;
     
-    if (type(local_cache) != 'dictionary)
-        local_cache = #[];
-    
-    // if this dies, it will also fail on explode_template_word
-    cmd = (| (command.explode())[1] |);
-    for part in (command.explode_template_word())
-        local_cache = local_cache.setadd_elem(part, cmd);
-};
-
-protected method .add_to_remote_cache() {
-    arg command, definer;
-    var part, cmd, value, cmds, defs, refs;
-    
-    if (type(remote_cache) != 'dictionary)
-        remote_cache = #[];
-    
-    // if this dies, it will also fail on explode_template_word
-    cmd = (| (command.explode())[1] |);
-    for part in (command.explode_template_word()) {
-        if ((value = (| remote_cache[part] |))) {
-            cmds = (value[1]).setadd(cmd);
-            refs = ((| (value[2])[definer] |) || 0) + 1;
-            defs = (value[2]).add(definer, refs);
-            remote_cache = remote_cache.add(part, [cmds, defs]);
-        } else {
-            remote_cache = remote_cache.add(part, [[cmd], #[[definer, 1]]]);
+    if (.is($place)) {
+        for p in (.contents()) {
+            if (p.is($command_cache))
+                return;
         }
     }
+    for p in (([this()] + parents()) + modules)
+        (| p.cache_server_uninit() |);
 };
 
-public method .cache_init() {
+public method .cache_server_init() {
     if (!(sender().has_ancestor(definer())))
         throw(~nochild, ((sender() + " is not a descendant of ") + definer()) + ".");
-    if (.is_command_cache()) {
-        if ((!local_cache) || (!remote_cache))
-            .rehash_caches();
-    }
+    if (type(commands) != 'dictionary)
+        .rehash_cache();
 };
 
-public method .cache_uninit() {
+public method .cache_server_uninit() {
     var user;
     
-    // if (!.is($user))
-    //    throw(~notuser, this() + " is not a user object.");
     if (!(sender().has_ancestor(this())))
         throw(~nochild, ((sender() + " is not a descendant of ") + this) + ".\n");
-    if (.is_command_cache()) {
-        // see if anybody still needs us, otherwise purge the caches
+    
+    // see if anybody still needs us, otherwise purge
+    if (.is_general_cache()) {
         for user in ($user_db.connected()) {
             if (user.has_ancestor(this()))
                 return;
         }
-        .purge_caches();
     }
+    .purge_cache();
 };
 
-root method .core_command_cache() {
-    if (this() == definer()) {
-        interfaces = (local_cache = (remote_cache = (shortcut_cache = 0)));
-    } else {
-        (| clear_var('interfaces) |);
-        (| clear_var('local_cache) |);
-        (| clear_var('remote_cache) |);
-        (| clear_var('shortcut_cache) |);
-    }
-};
-
-public method .del_command_interface() {
-    arg interface;
-    
-    if (!(interface.has_flag('command_cache)))
-        throw(~perm, ("Command interface " + interface) + " is not setup as a cache.");
-    interfaces = setremove(interfaces || [], interface);
-    interface.interface_unlink();
-};
-
-protected method .del_from_remote_cache() {
-    arg command, definer;
-    var part, cmd, value, cmds, defs, refs;
-    
-    if (type(remote_cache) != 'dictionary)
-        return;
-    
-    // if this dies, it will also fail on explode_template_word
-    cmd = (| (command.explode())[1] |);
-    for part in (command.explode_template_word()) {
-        if ((value = (| remote_cache[part] |))) {
-            refs = ((| (value[2])[definer] |) || 1) - 1;
-            if (!refs) {
-                remote_cache = remote_cache.del(part);
-                if (!remote_cache)
-                    (| clear_var('remote_cache) |);
-            } else {
-                [cmds, defs] = value;
-                defs = defs.add(definer, refs);
-                remote_cache = remote_cache.add(part, [cmds, defs]);
-            }
-        }
-    }
+public method .command_cache() {
+    return commands;
 };
 
-public method .del_object_from_remote_cache() {
-    arg obj;
-    var info, thing, element, part;
+public method .command_modules() {
+    arg @args;
     
-    info = (| obj.all_remote_commands() |);
-    if (info) {
-        for element in (info) {
-            for part in (element[2])
-                .del_from_remote_cache(part[1], element[1]);
-        }
-    }
+    return modules;
 };
 
-protected method .find_in_command_cache() {
-    arg cmd_word, cache;
-    var matches, match, obj, objs;
-    
-    matches = #[];
-    for obj in ([this()] + parents()) {
-        match = (| obj.(cache)()[cmd_word] |);
-        if (match)
-            matches = matches.union(match);
-    }
-    return matches;
+root method .core_command_cache() {
+    .purge_cache();
 };
 
-public method .find_in_local_cache() {
-    arg cmd;
+public method .del_command_module() {
+    arg module;
     
-    return (> local_cache[cmd] <);
+    (> .perms(sender()) <);
+    modules = setremove(modules || [], module);
 };
 
-protected method .find_in_local_caches() {
-    arg cmd_word;
-    var matches, match, obj, objs;
+protected method .del_from_cache() {
+    arg command, definer;
+    var part, cmd, c;
     
-    matches = [];
-    for obj in (([this()] + parents()) + (interfaces || [])) {
-        if ((match = (| obj.find_in_local_cache(cmd_word) |)))
-            matches = matches.union(match);
+    if (type(commands) != 'dictionary)
+        commands = #[];
+    cmd = command.word(1);
+    for part in (cmd.explode_template_word()) {
+        for c in ((| commands[part] |) || []) {
+            if (c == [command, definer])
+                commands = commands.del_elem(part, [command, definer]);
     }
-    return matches;
-};
-
-public method .find_in_remote_cache() {
-    arg cmd;
-    
-    return (> remote_cache[cmd] <);
-};
-
-public method .find_in_remote_caches() {
-    arg cmd_word;
-    var matches, match, obj, objs;
-    
-    matches = [];
-    for obj in ([this()] + parents()) {
-        if ((match = (| obj.find_in_remote_cache(cmd_word) |)))
-            matches = matches.union(match);
     }
-    return matches;
-};
-
-public method .interfaces() {
-    return interfaces || [];
 };
 
-public method .is_command_cache() {
-    return 'command_cache in (.flags());
+public method .is_general_cache() {
+    return 'general_cache in (.flags());
 };
 
-public method .local_cache() {
-    return local_cache;
-};
-
-public method .match_in_local_cache() {
+public method .match_command() {
     arg str, cmd, args;
-    var command, match, matched, templates, info, cdef, def;
+    var command, m, matched, templates, info, cdef, def, cmds, c, p;
     
     templates = (matched = []);
-    for command in (.find_in_local_caches(cmd)) {
-        info = .get_command_info('local, command);
-        if (!info)
+    cmds = #[];
+    if (dict_contains(commands, cmd))
+        cmds = #[[this(), commands[cmd]]];
+    for def in (parents() + modules) {
+        if ((c = def.command_cache()) && dict_contains(c, cmd))
+            cmds = dict_add(cmds, def, c[cmd]);
+    }
+    if (!cmds)
+        return 0;
+    for def in (cmds) {
+        if ((def[1]) in parents())
+            p = this();
+        else
+            p = def[1];
+        for command in (def[2]) {
+            if (!(info = (command[2]).command_info('local, command[1])))
             continue;
         for cdef in (info) {
-            match = match_template(args, cdef[2]);
-            if (match != 0)
-                matched += [[match.length(), [str, cmd, @match], @cdef.subrange(3)]];
+                if ((m = match_template(args, cdef[2])) != 0)
+                    matched += [[listlen(m), [str, cmd, @m], p, @sublist(cdef, 3)]];
         }
         templates = templates.union(info.slice(3));
+            refresh();
+        }
     }
     if (matched) {
         info = [matched[1]];
-        matched = matched.delete(1);
-        for match in (matched) {
-            if ((match[1]) > ((info[1])[1]))
-                info = [match];
-            else if ((match[1]) == ((info[1])[1]))
-                info += [match];
+        matched = delete(matched, 1);
+        for m in (matched) {
+            if ((m[1]) > ((info[1])[1]))
+                info = [m];
+            else if ((m[1]) == ((info[1])[1]))
+                info += [m];
         }
-        return ['local, info];
+        return ['command, info];
     }
     if (!templates)
         return 0;
     return ['partial, templates];
 };
 
-public method .match_in_remote_cache() {
+public method .match_remote_command() {
     arg str, cmd, args;
-    var cache, definer, command, info, cdef, match, matched, templates;
+    var command, m, matched, templates, info, cdef, def, cmds, c;
     
-    if (!(cache = (| .find_in_remote_caches(cmd) |)))
+    if (this() != $remote_cache)
+        throw(~perm, "This should only be used on $remote_cache");
+    templates = (matched = []);
+    if (commands && dict_contains(commands, cmd))
+        cmds = commands[cmd];
+    else
         return 0;
-    templates = [];
-    matched = [];
-    for command in (cache[1]) {
-        for definer in ((cache[2]).keys()) {
-            info = definer.get_command_info('remote, command);
-            if (!info)
+    for command in (cmds) {
+        if (!(info = (command[2]).command_info('remote, command[1])))
                 continue;
             for cdef in (info) {
-                match = args.match_template(cdef[2]);
-                if (match != 0)
-                    matched += [[match.length(), definer, [str, cmd, @match], @cdef.subrange(3)]];
+            if ((m = match_template(args, cdef[2])) != 0)
+                matched += [[listlen(m), command[2], [str, cmd, @m], @sublist(cdef, 3)]];
             }
             templates = templates.union(info.slice(3));
-        }
+        refresh();
     }
     if (matched) {
         info = [matched[1]];
-        matched = matched.delete(1);
-        for match in (matched) {
-            if ((match[1]) > ((info[1])[1]))
-                info = [match];
-            else if ((match[1]) == ((info[1])[1]))
-                info += [match];
+        matched = delete(matched, 1);
+        for m in (matched) {
+            if ((m[1]) > ((info[1])[1]))
+                info = [m];
+            else if ((m[1]) == ((info[1])[1]))
+                info += [m];
         }
         return ['remote, info];
     }
+    if (!templates)
+        return 0;
     return ['partial, templates];
 };
 
-public method .match_in_shortcut_cache() {
-    arg str, cmd, args;
-    var shortcut, match, obj, shorts;
-    
-    for obj in ([this()] + parents()) {
-        if ((shorts = obj.shortcut_cache())) {
-            for shortcut in (shorts) {
-                match = match_pattern(str, shortcut[1]);
-                if (match != 0)
-                    return ['shortcut, [(shortcut[2])[1], [str, @$command_lib.handle_shortcut_fields((shortcut[2])[2], match)]]];
+public method .match_shortcut() {
+    arg str, @ignore;
+    var s, match, obj, args;
+    
+    for obj in (([this()] + parents()) + modules) {
+        for s in ((obj.shortcut_cache()) || []) {
+            if ((match = match_pattern(str, s[1])) != 0) {
+                args = $command_lib.handle_shortcut_fields((s[2])[2], match);
+                return ['shortcut, [(s[2])[1], [str, @args]]];
             }
         }
     }
     return 0;
 };
 
-public method .purge_caches() {
-    (> .perms(sender()) <);
-    (| clear_var('shortcut_cache) |);
-    (| clear_var('remote_cache) |);
-    (| clear_var('local_cache) |);
+public method .parse_command_module() {
+    arg value, action, @args;
+    
+    value = (> $object_lib.to_dbref(value) <);
+    if (!(value.is($user_interfaces)))
+        throw(~failed, (value.namef('ref)) + " is not a child of $user_interfaces");
+    if (!('general_cache in (value.flags())))
+        throw(~failed, (value.namef('ref)) + " is not set as a general cache");
+    if (action == 'del) {
+        if (!(value in modules))
+            throw(~failed, ("The module '" + value) + "' is not set, and thus cannot be removed");
+        return value;
+    }
+    return value;
+};
+
+public method .purge_cache() {
+    (caller() == definer()) || (> .perms(sender()) <);
+    (| clear_var('commands) |) || (commands = 0);
+    (| clear_var('shortcuts) |) || (shortcuts = 0);
 };
 
-public method .rehash_caches() {
-    var cmd, obj, part, element;
+public method .rehash_cache() {
+    var cmd, obj, part, element, info;
     
     (> .perms(sender()) <);
-    (| .purge_caches() |);
-    if (!(.is_command_cache())) {
-        // if we are not an official 'cache', just cache commands defined on us
+    (| .purge_cache() |);
+    if (!(.is_general_cache())) {
+        // if we are not an official cache, just cache commands we define
+        commands = #[];
         for cmd in (.local_commands()) {
             for part in (cmd[2])
-                .add_to_local_cache(part[1]);
+                .add_to_cache(part[1], this());
         }
-        shortcut_cache = (.shortcuts()).to_list();
+        shortcuts = (.shortcuts()).to_list();
     } else {
         // otherwise cache all defined commands
-        (> .add_object_to_local_cache(this()) <);
-        shortcut_cache = .all_shortcuts();
+        if ((info = .all_local_commands())) {
+            for element in (info) {
+                [obj, element] = element;
+                for part in (element)
+                    .add_to_cache(part[1], obj);
     }
-    
-    // remote caches are different, and HAVE to be specific to the user
-    if (.is($location)) {
-        for obj in ([this()] + (.contents()))
-            (> .add_object_to_remote_cache(obj) <);
+        }
+        shortcuts = .all_shortcuts();
     }
 };
 
-public method .remote_cache() {
-    return remote_cache;
-};
-
-public method .set_as_command_cache() {
-    arg makecache;
+protected method .set_command_modules() {
+    arg name, definer, value;
     
-    (> .perms(sender(), 'manager) <);
-    if (makecache)
-        (> .add_flag('command_cache) <);
-    else
-        (> .del_flag('command_cache) <);
+    switch (value[1]) {
+        case 'set:
+            modules = value[2];
+        case 'add:
+            modules = setadd(modules, value[2]);
+        case 'del:
+            modules = setremove(modules, value[2]);
+        default:
+            throw(~type, "Unknown action: " + (value[1]));
+    }
 };
 
 public method .shortcut_cache() {
-    return shortcut_cache;
+    return shortcuts;
 };
 
 root method .uninit_command_cache() {
-    var i;
+    var m;
     
-    (| .purge_caches() |);
-    for i in (interfaces || [])
-        i.interface_unlink();
+    (| .purge_cache() |);
+    for m in (modules || [])
+        m.unlink_module();
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/command_lib.cdc ColdCore-3.0a10/src/command_lib.cdc
--- ColdCore-3.0a9.02/src/command_lib.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/command_lib.cdc	Sat Mar 14 15:49:02 1998
@@ -17,10 +17,10 @@
     while (opt) {
         if ((reg = regexp(opt, "^[\+-]([^= ]*)=([^ ]+) *(.*)"))) {
             opt = reg[3];
-            out += [delete(reg, 3)];
+            out += delete(reg, 3);
         } else if ((reg = regexp(opt, "^[\+-]([^ ]+) *(.*)"))) {
             opt = reg[2];
-            out += [[reg[1]]];
+            out += [reg[1]];
         } else {
             throw(~invopt, "Option templates must begin with '+' or '-'");
         }
@@ -245,6 +245,8 @@
         }
     }
     cmd = [cmd[1], (cmd.subrange(2)).join()];
+    if ((| "* *" in (cmd[2]) |))
+        throw(~parse, "Invalid template: two args cannot be next to each other (<> <>)");
     return [cmd, relations];
 };
 
diff -rwu ColdCore-3.0a9.02/src/command_parser.cdc ColdCore-3.0a10/src/command_parser.cdc
--- ColdCore-3.0a9.02/src/command_parser.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/command_parser.cdc	Sat Mar 14 15:49:25 1998
@@ -8,7 +8,7 @@
 var $root manager = $command_parser;
 
 public method ._local() {
-    arg user, nmatch, match, template, method, info;
+    arg user, nmatch, match, obj, template, method, info;
     var x, cmd;
     
     cmd = match[2];
@@ -22,7 +22,7 @@
             return ['error, (((traceback()[1])[2]) + template) + "\""];
         return ['error, (traceback()[1])[2]];
     }
-    return ['command, user, method, @match];
+    return ['command, obj, method, @match];
 };
 
 public method ._remote() {
@@ -37,6 +37,7 @@
                     that = (> user.match_environment(match[x + 2]) <);
                     if (!(that.is(definer)))
                         return ['error, ((("You cannot " + (match[2])) + " ") + (that.name())) + "."];
+                    value = that;
                 } else {
                     value = (> .convert_arg(cmd, (info[x])[1], match[x + 2], user, ((info[x])[2]) || [definer], user) <);
                 }
@@ -106,7 +107,7 @@
             args = $parse_lib.opt(str, @argargs);
             if (!(args[1]))
                 throw(~syntax, "No reference specified for command \"");
-            obj = (> me.match_environment((args[1])[1]) <);
+            obj = (> me.match_environment(join(args[1])) <);
             return [obj, delete(args[1], 1), args[2]];
         case 'objref:
             return (> $parse_lib.ref(str, me) <);
@@ -190,15 +191,25 @@
 
 public method .local() {
     arg user, @matches;
-    var parsed, match;
+    var parsed, match, out;
     
     parsed = [];
+    out = [];
     for match in (matches) {
         match = ._local(user, @match);
         if ((match[1]) == 'command)
-            return match;
+            out += [match];
+        else
         parsed = [match[2]] + parsed;
     }
+    if (listlen(out) == 1)
+        return out[1];
+    if (listlen(out) > 1) {
+        out = [("Sorry, \"" + (((matches[1])[2])[1])) + "\" could match any of:"];
+        for match in (matches)
+            out += [(("    \"" + (match[4])) + "\" on ") + ((match[3]).namef('ref))];
+        return ['error, out];
+    }
     return ['error, parsed.compress()];
 };
 
@@ -210,33 +210,28 @@
     if (cmd) {
         cmd = [str, cmd[1], ((cmd.subrange(2)).join()) || ""];
         p = [];
-        if ((c = (| u.match_in_shortcut_cache(@cmd) |))) {
+        if ((c = u.match_shortcut(@cmd))) {
             if ((c[1]) == 'shortcut)
                 return .shortcut(u, @c[2]);
             p = c[2];
         }
-        if ((c = (| u.match_in_local_cache(@cmd) |))) {
-            if ((c[1]) == 'local)
+        if ((c = u.match_command(@cmd))) {
+            if ((c[1]) == 'command)
                 return .local(u, @c[2]);
             p += c[2];
         }
-        if ((c = (| u.match_in_remote_cache(@cmd) |))) {
-            if ((c[1]) == 'remote)
-                return .remote(u, @c[2]);
-            p += c[2];
-        }
         l = u.location();
-        if ((c = (| l.match_in_local_cache(@cmd) |))) {
-            if ((c[1]) == 'local)
-                return .local(l, @c[2]);
+        if ((c = (| l.match_shortcut(@cmd) |))) {
+            if ((c[1]) == 'shortcut)
+                return .shortcut(l, @c[2]);
             p += c[2];
         }
-        if ((c = (| l.match_in_remote_cache(@cmd) |))) {
-            if ((c[1]) == 'remote)
-                return .remote(u, @c[2]);
+        if ((c = (| l.match_command(@cmd) |))) {
+            if ((c[1]) == 'command)
+                return .local(l, @c[2]);
             p += c[2];
         }
-        if ((c = (| .grasp_for_remote_command(@cmd) |))) {
+        if ((c = $remote_cache.match_remote_command(@cmd))) {
             if ((c[1]) == 'remote)
                 return .remote(u, @c[2]);
             p += c[2];
diff -rwu ColdCore-3.0a9.02/src/connection.cdc ColdCore-3.0a10/src/connection.cdc
--- ColdCore-3.0a9.02/src/connection.cdc	Sat Mar 14 15:40:48 1998
+++ ColdCore-3.0a10/src/connection.cdc	Sat Mar 14 15:49:07 1998
@@ -318,9 +318,10 @@
     if (interface)
         (| interface.connection_going_away(remote_addr, remote_port) |);
     interface = 0;
-    if (read_block)
+    if (read_block) {
         read_block = read_block.add('lines, 'disconnected);
     .finish_reading_block();
+    }
     if (tid != (-1))
         $scheduler.del_task(tid);
     tid = 0;
diff -rwu ColdCore-3.0a9.02/src/connection_interface.cdc ColdCore-3.0a10/src/connection_interface.cdc
--- ColdCore-3.0a9.02/src/connection_interface.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/connection_interface.cdc	Sat Mar 14 15:49:09 1998
@@ -1,5 +1,5 @@
 
-new object $connection_interface: $network, $command_cache, $frob;
+new object $connection_interface: $network, $frob, $command_cache;
 
 var $connection_interface connection = 0;
 var $has_commands local = #[];
diff -rwu ColdCore-3.0a9.02/src/converters.cdc ColdCore-3.0a10/src/converters.cdc
--- ColdCore-3.0a9.02/src/converters.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/converters.cdc	Sat Mar 14 15:49:25 1998
@@ -28,6 +28,15 @@
     return string;
 };
 
+public method .parse_textarea_joined() {
+    arg string;
+    
+    anticipate_assignment();
+    string = strsub(string, $http.decode("%0d"), "");
+    string = strsub(string, $http.decode("%0a"), " ");
+    return string;
+};
+
 public method .to_boolean() {
     arg string, @extra;
     
diff -rwu ColdCore-3.0a9.02/src/data_lib.cdc ColdCore-3.0a10/src/data_lib.cdc
--- ColdCore-3.0a9.02/src/data_lib.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/data_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -55,21 +55,55 @@
             if (!value)
                 return ["[]"];
             s = map i in [1 .. (len = value.length())] to ((.unparse_indent(value[i])).affix((i < len) ? "," : "")).sum();
-            if (((s.mmap('length)).sum()) < 60)
+            s ?= [];
+            if (((s.mmap('length)).sum()) < 60) {
                 return [("[" + (s.join())) + "]"];
-            else
-                return (["[", ""].affix(s.prefix("  "))).affix("]");
+            } else {
+                s = s.prefix("  ");
+                s = s.replace(1, (s[1]).subrange(3));
+                return (["[ "].affix(s)).affix("]");
+            }
         case 'dictionary:
             s = map i in [1 .. (len = (value.keys()).length())] to ((.unparse_indent([(value.keys())[i], value[(value.keys())[i]]])).affix((i < len) ? "," : "")).sum();
-            if (((s.mmap('length)).sum()) < 60)
+            s ?= [];
+            if (((s.mmap('length)).sum()) < 60) {
                 return [("#[" + (s.join())) + "]"];
-            else
-                return (["#[", ""].affix(s.prefix("  "))).affix(["]"]);
+            } else {
+                s = s.prefix("  ");
+                s = s.replace(1, (s[1]).subrange(3));
+                return (["#["].affix(s)).affix("]");
+            }
         case 'frob:
             return (((["<"].affix(class(value))).affix(",")).affix(.unparse_indent(value.value()))).affix(">");
         default:
             return [toliteral(value)];
     }
+};
+
+public method .unparse_indent_html() {
+    arg value;
+    var chunk, chunk_out, out, object_parse, obj_regexp, line, word;
+    
+    obj_regexp = "\$[a-zA-Z0-9_]+";
+    out = [];
+    value = .unparse_indent(value);
+    value = value.mmap('html_escape);
+    for line in (value) {
+        object_parse = line.global_regexp(obj_regexp);
+        chunk_out = "";
+        while (object_parse) {
+            [chunk, (word ?= 0), @object_parse] = object_parse;
+            chunk_out += chunk;
+            if (word) {
+                if ((| $object_lib.to_dbref(word) |))
+                    chunk_out += $page_bin_index._make_string_to_display_href(word);
+                else
+                    chunk_out += word;
+            }
+        }
+        out += [chunk_out];
+    }
+    return out;
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/described.cdc ColdCore-3.0a10/src/described.cdc
--- ColdCore-3.0a9.02/src/described.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/described.cdc	Sat Mar 14 15:49:02 1998
@@ -30,7 +30,7 @@
     still = ("Do you still want to describe " + (.name())) + "? [no] ";
     if (!(set.contains('described_prose))) {
         while (!end) {
-            if (.is($exit))
+            if (.is($path))
                 type = "exit ";
             else if (.is($place))
                 type = "place ";
@@ -64,7 +64,7 @@
     arg flags;
     var out, name;
     
-    out = $ctext_frob.new_with([$cml_lib.format_subj_tag((.name()).capitalize())]);
+    out = $ctext_frob.new_with([$cml_lib.format_subj_tag(.name())]);
     if ((| flags['prose] |))
         return [out.append(.prose())];
     return [out];
diff -rwu ColdCore-3.0a9.02/src/dictionary.cdc ColdCore-3.0a10/src/dictionary.cdc
--- ColdCore-3.0a9.02/src/dictionary.cdc	Sat Mar 14 15:40:23 1998
+++ ColdCore-3.0a10/src/dictionary.cdc	Sat Mar 14 15:49:02 1998
@@ -97,6 +97,14 @@
 
 public method .keys(): native;
 
+public method .mmap() {
+    arg list, method, @args;
+    var x;
+    
+    // call 'method on each object, return results.
+    return map x in (list) to (x.(method)(@args));
+};
+
 public method .nunion() {
     arg dict1, dict2;
     var key;
diff -rwu ColdCore-3.0a9.02/src/dir_desktop.cdc ColdCore-3.0a10/src/dir_desktop.cdc
--- ColdCore-3.0a9.02/src/dir_desktop.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/dir_desktop.cdc	Sat Mar 14 15:49:26 1998
@@ -3,6 +3,7 @@
 
 var $directories default_page = $page_desktop_login;
 var $directories entries = #[["web_prefs", $page_web_prefs]];
+var $directories http_auth_realm = 0;
 var $directories lock = [$security_lib, 'bounce_to_auth, ["/login"]];
 var $dmi_data descriptions = #[];
 var $root created_on = 864277943;
diff -rwu ColdCore-3.0a9.02/src/directories.cdc ColdCore-3.0a10/src/directories.cdc
--- ColdCore-3.0a9.02/src/directories.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/directories.cdc	Sat Mar 14 15:49:26 1998
@@ -3,27 +3,35 @@
 
 var $directories default_page = $page_root_index;
 var $directories entries = #[["home", $page_home_index], ["bin", $page_bin_index], ["~", $page_home_index], ["desktop", $dir_desktop], ["images", $page_file_index], ["login", $page_login]];
+var $directories http_auth_realm = "the Cold Dark";
 var $directories lock = 0;
 var $dmi_data descriptions = #[];
 var $root created_on = 863765302;
+var $root defined_settings = #[["default-page", #[['get, ['get_default_page]], ['set, ['set_default_page]], ['parse, ['parse_default_page]]]], ["http-auth-realm", #[['get, ['get_http_auth_realm]], ['set, ['set_http_auth_realm]]]]];
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
 var $root managed = [$directories];
 var $root manager = $directories;
 
+public method .add_entry() {
+    arg name, target;
+    
+    entries = entries.add(name, target);
+};
+
 public method .build_footer() {
     arg header, info, args;
     
-    return ["<hr size=1 noshade><a href=\"/\">the Cold Dark</a></body>"];
+    return [("<hr size=1 noshade><a href=\"/\">" + ($motd.server_name())) + "</a></body>"];
 };
 
 public method .build_header() {
-    arg header, info, args, @title;
-    var body;
+    arg header, info, args, @more;
+    var body, title, head;
     
-    [(title ?= "the Cold Dark")] = title;
+    [(title ?= $motd.server_name()), (head ?= "")] = more;
     body = "<body bgcolor=\"#ffffff\" text=\"#000000\" link=\"#130191\" vlink=\"#100040\" alink=\"#4000bf\">";
-    return ["<head>", ("<title>" + title) + "</title>", "</head>", body];
+    return ["<head>", ("<title>" + title) + "</title>", head, "</head>", body];
 };
 
 root method .core_directories() {
@@ -39,6 +47,16 @@
     return default_page;
 };
 
+public method .del_entry() {
+    arg name;
+    
+    entries = (> entries.del(name) <);
+};
+
+public method .entries() {
+    return entries;
+};
+
 public method .entry() {
     arg str;
     
@@ -120,17 +120,55 @@
     return page;
 };
 
+public method .get_default_page() {
+    arg name, definer;
+    
+    return default_page;
+};
+
+public method .get_http_auth_realm() {
+    arg name, definer;
+    
+    return http_auth_realm || ($motd.server_name());
+};
+
 public method .get_lock() {
     return lock;
 };
 
 public method .get_realm() {
-    return "the Cold Dark";
+    return http_auth_realm || ($motd.server_name());
 };
 
 root method .init_directories() {
     entries = #[];
     default_page = $page_root_index;
+};
+
+public method .parse_default_page() {
+    arg value, @args;
+    var object;
+    
+    catch ~objnf, ~namenf, ~invdbref {
+        object = $object_lib.to_dbref(value);
+        if (object.is($page))
+            return object;
+    } with {
+        throw(~check, "default-page must be a valid descendant of $page.");
+    }
+    throw(~check, "default-page must be a valid descendant of $page.");
+};
+
+public method .set_default_page() {
+    arg name, definer, value;
+    
+    default_page = value;
+};
+
+public method .set_http_auth_realm() {
+    arg name, definer, value;
+    
+    http_auth_realm = value;
 };
 
 root method .uninit_directories() {
diff -rwu ColdCore-3.0a9.02/src/dmi_data.cdc ColdCore-3.0a10/src/dmi_data.cdc
--- ColdCore-3.0a9.02/src/dmi_data.cdc	Sat Mar 14 15:40:23 1998
+++ ColdCore-3.0a10/src/dmi_data.cdc	Sat Mar 14 15:49:02 1998
@@ -12,6 +12,7 @@
     arg method, identifier, @data;
     var method_data, identifier_data;
     
+    (> .perms(sender()) <);
     method_data = (| descriptions[method] |) || #[];
     if ((data.length()) == 1) {
         method_data = method_data.add(identifier, @data);
@@ -26,6 +27,8 @@
 public method .add_description_to_db() {
     arg method, description;
     
+    if (caller() != $interface_registry)
+        (> .perms(sender()) <);
     descriptions ?= #[];
     descriptions = (> descriptions.add(method, description) <);
 };
@@ -34,6 +37,7 @@
     arg method, identifier, @data;
     var method_data, identifier_data;
     
+    (> .perms(sender()) <);
     method_data = (| descriptions[method] |) || #[];
     if ((data.length()) == 0) {
         (| (method_data = method_data.del(identifier)) |);
@@ -48,6 +48,8 @@
 public method .del_description_from_db() {
     arg method;
     
+    if (caller() != $interface_registry)
+        (> .perms(sender()) <);
     descriptions = (| descriptions.del(method) |);
 };
 
diff -rwu ColdCore-3.0a9.02/src/dmi_data_ui.cdc ColdCore-3.0a10/src/dmi_data_ui.cdc
--- ColdCore-3.0a9.02/src/dmi_data_ui.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/dmi_data_ui.cdc	Sat Mar 14 15:49:05 1998
@@ -1,6 +1,9 @@
 
 new object $dmi_data_ui: $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $dmi_data descriptions = #[];
 var $has_commands local = \
   #[["@verbal-index", [["@verbal-index", "", "@verbal-index", 'verbal_index_cmd, #[]]]], ["@dmethod", [["@dmethod", "*", "@dmethod <objref>", 'describe_method_english_cmd, #[[1, ['objref, []]]]]]],\
diff -rwu ColdCore-3.0a9.02/src/editor_reference.cdc ColdCore-3.0a10/src/editor_reference.cdc
--- ColdCore-3.0a9.02/src/editor_reference.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/editor_reference.cdc	Sat Mar 14 15:49:04 1998
@@ -32,11 +32,13 @@
     (sender() == $housekeeper) || (> .perms(sender(), this()) <);
     out = [];
     for s in (bg_sessions || []) {
-        if (valid(s) && (s.cleanup_session()))
+        if (valid(s)) {
+            if (s.cleanup_session())
             s.destroy();
         else
             out = setadd(out, s);
     }
+    }
     bg_sessions = out;
     if (valid(active_editor) && (active_editor.cleanup_session())) {
         active_editor.destroy();
@@ -62,7 +62,10 @@
         .tell("Storing active editor..");
         .store_editor();
     }
+    catch ~quota
     return .new_editor_session(ref, opts, type);
+    with
+        return ["You do not have enough quota remaining."];
 };
 
 public method .edit_cmd() {
diff -rwu ColdCore-3.0a9.02/src/editor_session.cdc ColdCore-3.0a10/src/editor_session.cdc
--- ColdCore-3.0a9.02/src/editor_session.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/editor_session.cdc	Sat Mar 14 15:49:25 1998
@@ -94,7 +94,7 @@
     var m;
     
     if ((m = regexp(err[1], "Line ([0-9]+)"))) {
-        line = toint(m[1]);
+        line = min((text.length()) + 1, toint(m[1]));
         return [.list_cmd("", "", m[1])] + err;
     }
     return err;
@@ -211,7 +211,7 @@
     with
         return "You must set to a line number.";
     if ((number < 1) || (number > ((text.length()) + 1)))
-        return "Out if range.";
+        return "Out of range.";
     else
         line = number;
     return ("Current line set to " + tostr(line)) + ".";
@@ -219,15 +219,15 @@
 
 public method .list_cmd() {
     arg cmd, tmpl, rangestr;
-    var start, end, out, i, str, l, lineno, rows, lines, diff;
+    var start, end, out, i, str, l, lineno, rows, lines, diff, numrows;
     
     (> .perms(caller(), $user, definer()) <);
     if (text == [])
         return "There is no text.";
     rangestr = rangestr.trim();
+    rows = (| sender().get_rows() |) || 20;
     l = text.length();
     if (!rangestr) {
-        rows = sender().get_rows();
         start = line - (rows / 2);
         end = line + (rows / 2);
         if (start < 1) {
@@ -241,7 +241,7 @@
             return "Illegal list range.";
     }
     out = [];
-    rows = (end - start) + 1;
+    numrows = (end - start) + 1;
     for i in [start .. end] {
         if (i > l)
             break;
@@ -367,6 +367,7 @@
     (> .perms(caller(), $user, this()) <);
     if ((m = match_template(args, "as *")))
         return "Save as support is not yet completed.";
+    catch ~perm {
     if ((> (result = sender.do_save(finisher_object, finisher, text, client_data)) <) == 'clear) {
         sender.quit_editor();
         return "Done. Editor cleared.";
@@ -375,6 +376,9 @@
         return .compile_errors(@result[2]);
     modified = 0;
     return (result[2]) + ["Save completed."];
+    } with {
+        return (traceback()[1])[2];
+    }
 };
 
 public method .sed() {
@@ -445,6 +449,8 @@
             return "Messages on " + (finisher_object.namef('ref));
         case '_edit_mail_callback:
             return "Mail for " + (((client_data[2]).mmap('mail_name)).to_english());
+        case '_edit_variable_callback:
+            return (("Object Variable " + (client_data[1])) + ",") + (client_data[2]);
         default:
             tmp = strsed(tostr(finisher), "_edit_", "");
             tmp = strsed(tmp, "_callback", "");
@@ -468,7 +468,7 @@
     if ((| (sender().local_editor()) == 'mcp |)) {
         // Next time, when you have a clever idea about edit name, check
         // it for non-method editting sessions
-        sender.tell([(("#$# edit name: " + (.session_name())) + " upload: @mcp-upload-session ") + (.name()), @text, "."]);
+        sender.ptell([(("#$# edit name: " + (.session_name())) + " upload: @mcp-upload-session ") + (.name()), @text, "."], #[['nomod, 1]]);
         text = 'mcp;
         sender.store_editor();
         return 0;
diff -rwu ColdCore-3.0a9.02/src/english_lib.cdc ColdCore-3.0a10/src/english_lib.cdc
--- ColdCore-3.0a9.02/src/english_lib.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/english_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -6,11 +6,11 @@
 var $english_lib cardinal_direction_opposites = ["south", "southwest", "west", "northwest", "northeast", "east", "southeast"];
 var $english_lib cardinal_directions = ["north", "northeast", "east", "southeast", "south", "southwest", "west", "northwest"];
 var $english_lib letter_names = ["ay", "bee", "see", "dee", "ee", "eff", "jee", "aitch", "eye", "jay", "kay", "el", "em", "en", "oh", "pee", "queue", "ar", "es", "tee", "you", "vee", "double-you", "ex", "why", "zee"];
-var $english_lib nonvowel_exceptions = "historic|ydu|honor|honest|habitual|heir|RPG";
+var $english_lib nonvowel_exceptions = "^historic|ydu|honor|honest|habitual|heir|RPG";
 var $english_lib noun_exceptions = #[["child", "children"], ["deer", "deer"], ["moose", "moose"], ["mouse", "mice"]];
 var $english_lib selector_words = ["all", "everything", "everyone", "everybody"];
 var $english_lib verb_exceptions = #[["has", "have"], ["is", "are"], ["was", "were"], ["'s", "'ve"], ["can", "can"], ["collapses", "collapse"]];
-var $english_lib vowel_exceptions = "usu|uke|uvu|use|UPI|unit|univ|unic|uniq|unix|eur|uu|ubiq|union|one|once|uti|unif";
+var $english_lib vowel_exceptions = "^usu|uke|uvu|use|UPI|unit|univ|unic|uniq|unix|eur|uu|ubiq|union|one|once|uti|unif";
 var $root created_on = 847697242;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
@@ -103,11 +103,11 @@
     //
     //    $english_lib.capitalize(" @foo") => " @Foo"
     //
-    if (!(m = match_regexp(str, "[a-z0-9]+")))
+    if (!(m = regexp(str, "[a-z]+")))
         return str;
-    word = (regexp(str, "[a-z0-9]+")[1]).capitalize();
+    word = (m[1]).capitalize();
     anticipate_assignment();
-    return strsed(str, "[a-z0-9]+", word);
+    return (word in capitalize_exceptions) ? str : strsed(str, "[a-z]+", word);
 };
 
 public method .compress_names() {
diff -rwu ColdCore-3.0a9.02/src/event_handler.cdc ColdCore-3.0a10/src/event_handler.cdc
--- ColdCore-3.0a9.02/src/event_handler.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/event_handler.cdc	Sat Mar 14 15:49:02 1998
@@ -199,9 +199,16 @@
 
 public method .unhook_from_event() {
     arg event;
+    var events;
     
-    if (hooks)
+    if (hooks) {
+        events = (| hooks[event] |) || [];
+        events = setremove((| hooks[event] |) || [], sender());
+        if (events)
         hooks = dict_add(hooks, event, setremove(hooks[event], sender()));
+        else
+            hooks = (| dict_del(hooks, event) |);
+    }
     if (hooked)
         hooked = hooked.del_elem(sender(), event);
 };
diff -rwu ColdCore-3.0a9.02/src/exit.cdc ColdCore-3.0a10/src/exit.cdc
--- ColdCore-3.0a9.02/src/exit.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/exit.cdc	Sat Mar 14 15:49:07 1998
@@ -6,14 +6,14 @@
 var $exit closed = 0;
 var $exit dest = $void;
 var $exit lock = <$true_lock_frob, []>;
+var $exit msg_vars = #[["$actor", 0], ["actor", 0], ["$source", 0], ["source", 0], ["$dest", 0], ["dest", 0], ["$this", 0], ["this", 0], ["$lock", 0]];
 var $exit source = $void;
-var $foundation defined_msgs = #[["invoke", #[['branches, ["actor", "source", "dest"]]]], ["exit-open", #[['branches, ["actor", "general"]]]], ["exit-close", #[['branches, ["actor", "general"]]]], ["lock-fail", #[['branches, ["general", "actor"]]]], ["lock-try", #[['branches, ["general", "actor"]]]], ["lock-unlock", #[['branches, ["general", "actor"]]]], ["lock-lock", #[['branches, ["general", "actor"]]]], ["exit-closed", #[['branches, ["actor", "general"]]]]];
+var $foundation defined_msgs = #[["invoke", #[['branches, ["actor", "source.*", "dest.*"]], ['parser, 'parse_exit_msg]]], ["exit-open", #[['branches, ["actor", "general"]]]], ["exit-close", #[['branches, ["actor", "general"]]]], ["lock-fail", #[['branches, ["general", "actor"]]]], ["lock-try", #[['branches, ["general", "actor"]]]], ["lock-unlock", #[['branches, ["general", "actor"]]]], ["lock-lock", #[['branches, ["general", "actor"]]]], ["exit-closed", #[['branches, ["actor", "general"]]]]];
 var $foundation msgs = #[["invoke", #[["actor", <$ctext_frob, [["You take ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>], ["source", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " goes through ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>], ["dest", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " arrives."], #[['this, $exit]]]>]]], ["exit-close", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " closes ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>], ["actor", <$ctext_frob, [["You close ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>]]], ["exit-open", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " opens ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>], ["actor", <$ctext_frob, [["You open ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>]]], ["lock-fail", #[["actor", <$ctext_frob, [[<$generator, ["this", [], [], 'gen_this]>, " is locked."], #[['this, $exit]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " tries to take ", <$generator, ["this", [], [], 'gen_this]>, " but its locked!"], #[['this, $exit]]]>]]], ["lock-try", #[["actor", <$ctext_frob, [["You use ", <$generator, ["lock", [], [], 'gen_lock]>, " on ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $exit]]]>], ["general", <$ctext_frob, [[], #[['this, $exit]]]>]]], ["lock-unlock", #[["actor", <$ctext_frob, [["You unlock ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $exit]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " unlocks ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $exit]]]>]]], ["lock-lock", #[["actor", <$ctext_frob, [["You lock ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $exit]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " locks ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $exit]]]>]]], ["exit-closed", #[["actor", <$ctext_frob, [["You try to go through ", <$generator, ["this", [], [], 'gen_this]>, " but it is closed!"], #[['this, $exit]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " tries to take ", <$generator, ["this", [], [], 'gen_this]>, " but it is closed!"], #[['this, $exit]]]>]]]];
 var $has_commands remote = #[["@lock", [["@lock", "*", "@lock <this>", 'lock_cmd, #[[1, ['this, []]]]], ["@lock", "* with|to *", "@lock <this> with|to <any>", 'lock_with_cmd, #[[1, ['this, []]], [3, ['any, []]]]]]], ["@unlock", [["@unlock", "*", "@unlock <this>", 'unlock_cmd, #[[1, ['this, []]]]]]], ["open", [["open", "*", "open <this>", 'open_cmd, #[[1, ['this, []]]]]]], ["close", [["close", "*", "close <this>", 'close_cmd, #[[1, ['this, []]]]]]]];
 var $has_name name = ['uniq, "Generic Exit", "the Generic Exit"];
 var $root created_on = 796268969;
 var $root defined_settings = #[["closable", #[['get, ['get_closable]], ['set, ['set_closable]], ['clear, ['clear_closable]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$exit];
@@ -38,6 +38,8 @@
 protected method .clear_closable() {
     arg name;
     
+    if (closed)
+        (| clear_var('closed) |);
     (| clear_var('closable) |);
 };
 
@@ -86,35 +88,41 @@
     $sys.destroy_sender();
 };
 
-private method .detach(): nooverride  {
+public method .detach() {
     source && (source.detach_exit('source, this()));
     dest && (dest.detach_exit('dest, this()));
+    source = 0;
+    dest = 0;
 };
 
 public method .exit_msg_vars() {
     arg actor, @more;
-    var vars;
+    var vars, esource, edest;
     
-    vars = #[["$actor", actor], ["actor", actor.name()], ["$source", source], ["source", source.name()], ["$dest", dest], ["dest", dest.name()], ["$this", this()], ["this", .name()], ["$lock", lock]];
+    esource = .source();
+    edest = .dest();
+    vars = #[["$actor", actor], ["actor", actor.name()], ["$source", esource], ["source", esource.name()], ["$dest", edest], ["dest", edest.name()], ["$this", this()], ["this", .name()], ["$lock", lock]];
     if (more)
         vars = dict_union(vars, more[1]);
     return vars;
 };
 
 public method .get_closable() {
-    arg name, definer;
+    arg @args;
     
     return closable;
 };
 
 public method .invoke() {
     arg @flags;
-    var s, here, vars, m, actor, ln, v;
+    var s, here, vars, m, actor, ln, v, edest, esource;
     
     s = (actor = sender());
+    esource = .source();
+    edest = .dest();
     if (closed) {
         m = .eval_message("exit-closed", $exit, .exit_msg_vars(s));
-        return source.announce(m);
+        return esource.announce(m);
     }
     if (flags)
         flags = flags[1];
@@ -122,17 +130,18 @@
         flags = #[];
     flags = flags.add('actor, s);
     flags = flags.add_elem('exclude, s);
-    if (!valid(.dest()))
+    if (!valid(edest))
         return s.tell((.name()) + " has an invalid destination!");
     if (lock && (!(lock.try(s)))) {
         v = #[["lock", lock.lock_name()]];
         m = .eval_message("lock-fail", $exit, .exit_msg_vars(s, v));
-        return source.announce(m);
+        return esource.announce(m);
     }
-    s.move_to(dest);
     m = .eval_message("invoke", $exit, .exit_msg_vars(s));
-    dest.announce(m);
-    source.announce(m);
+    actor.tell(m);
+    s.move_to(edest);
+    edest.announce(m, actor);
+    esource.announce(m);
 };
 
 private method .invoke_notify() {
@@ -176,7 +185,7 @@
     if (!(| .perms(sender()) |))
         return ((("Only " + ((.manager()).name())) + " can lock ") + (.name())) + "!";
     catch ~objnf, ~parse {
-        lock = $lock_parser.parse(str, sender());
+        lock = $lock_frob.parse(str, sender());
         return ((("You lock " + (.name())) + " to allow ") + (lock.lock_name('exit))) + ".";
     } with {
         switch (error()) {
@@ -218,6 +218,18 @@
     .detach();
     if (sender() in [dest, source])
         $sys.destroy_sender();
+};
+
+public method .set_closable() {
+    arg name, definer, value;
+    
+    if (value) {
+        closable = 1;
+    } else if (dict_contains(this, 'closable)) {
+        if (closed)
+            (| clear_var('closed) |);
+        (| clear_var('closable) |);
+    }
 };
 
 public method .source() {
diff -rwu ColdCore-3.0a9.02/src/exit_frob.cdc ColdCore-3.0a10/src/exit_frob.cdc
--- ColdCore-3.0a9.02/src/exit_frob.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/exit_frob.cdc	Sat Mar 14 15:49:08 1998
@@ -106,7 +106,7 @@
 };
 
 frob method .dest() {
-    arg this;
+    arg this, @args;
     
     return this['dest];
 };
@@ -129,7 +129,7 @@
 frob method .discard() {
     arg data;
     
-    if (!(.is_writable_by(sender())))
+    if (!(.is_writable_by(data, sender())))
         throw(~perm, "Only writers and managers can discard exits.");
     return (> .detach(data) <);
 };
@@ -175,14 +175,15 @@
         m = .eval_message(this, "lock-fail", $exit, .exit_msg_vars(this, s, v));
         return (this['source]).announce(m);
     }
-    s.move_to(dest);
     vars = .exit_msg_vars(this, s);
     m = .eval_message(this, "invoke", $exit, vars);
-    dest.announce(m);
+    actor.tell(m);
+    s.move_to(dest);
+    dest.announce(m, actor);
     (this['source]).announce(m);
 };
 
-frob method .invoke_notify(): forked  {
+frob method .invoke_notify() {
     arg this, actor, flags;
     var vars, m, name;
     
@@ -231,7 +232,7 @@
     if (!(| .perms(this, sender()) |))
         return ((("Only " + ((.manager(this)).name())) + " can lock ") + (.name(this))) + "!";
     catch ~objnf, ~parse {
-        frob = .change_data(this, 'lock, $lock_parser.parse(str, sender()));
+        frob = .change_data(this, 'lock, $lock_frob.parse(str, sender()));
         return ((("You lock " + (.name(this))) + " to allow ") + ((frob.lock()).lock_name('exit))) + ".";
     } with {
         switch (error()) {
@@ -243,6 +244,12 @@
     }
 };
 
+frob method .manager() {
+    arg this;
+    
+    return (this['source]).manager();
+};
+
 public method .new() {
     var this;
     
@@ -286,7 +293,7 @@
 frob method .perms() {
     arg this, what, @args;
     
-    return (what == (this['manager])) || (> (this['source]).perms(what, @args) <);
+    return (> (this['location]).perms(what, @args) <);
 };
 
 frob method .place_destroyed() {
@@ -334,6 +334,14 @@
     arg this, mover, place;
     
     throw(~nomove, "You cannot do that to an exit!");
+};
+
+frob method .writers(): nooverride  {
+    arg this, @literal;
+    
+    if (literal)
+        return [];
+    return (this['source]).writers();
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/file.cdc ColdCore-3.0a10/src/file.cdc
--- ColdCore-3.0a9.02/src/file.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/file.cdc	Sat Mar 14 15:49:03 1998
@@ -6,6 +6,7 @@
 var $root inited = 1;
 var $root managed = [$file];
 var $root manager = $file;
+var $root trusted = [$mime_lib];
 
 public method .files() {
     arg path;
diff -rwu ColdCore-3.0a9.02/src/foundation.cdc ColdCore-3.0a10/src/foundation.cdc
--- ColdCore-3.0a9.02/src/foundation.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/foundation.cdc	Sat Mar 14 15:49:02 1998
@@ -5,13 +5,81 @@
 var $foundation edit_types = 0;
 var $foundation msgs = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$foundation];
 var $root manager = $foundation;
 var $root trusted = [];
 
+private method ._parse_msg_branches(): nooverride  {
+    arg name, attr, value;
+    var branch, p, varkeys, sub, m, attrs;
+    
+    if (!value)
+        value = ["general"];
+    attrs = defined_msgs[name];
+    for branch in (value) {
+        sub = explode(branch, ".");
+        if (listlen(sub) > 2)
+            throw(~msgbad, ("Too many message branches '" + branch) + "'.");
+        for p in (sub) {
+            if (((p[1]) == "(") || (p == "*"))
+                varkeys++;
+            else if (!($code_lib.valid_message_id(p)))
+                throw(~msgbad, ("Branch '" + p) + "' contains invalid characters.");
+        }
+    }
+    if (varkeys) {
+        varkeys = #[];
+        for branch in (value) {
+            if (("(" in branch) || ("*" in branch)) {
+                if ((m = regexp(branch, "\.\(([^)]+)\)$"))) {
+                    sub = strsed(branch, "\.\(([^)]+)\)$", "");
+                    value = replace(value, branch in value, sub + ".*");
+                    varkeys = dict_add(varkeys, sub, m[1]);
+                } else if ((branch = strsed(branch, "\.\*$", ""))) {
+                    varkeys = dict_add(varkeys, branch, "$" + branch);
+                } else {
+                    throw(~msgbad, "Variable branch part must be last.");
+                }
+            }
+        }
+        attrs = dict_add(attrs, 'varkeys, varkeys);
+    } else if (dict_contains(attrs, 'varkeys)) {
+        attrs = dict_del(attrs, 'varkeys);
+    }
+    return [attrs, value];
+};
+
+public method ._parse_msg_part(): nooverride  {
+    arg name, all;
+    var m, parts, mparts, mname, yes, x;
+    
+    m = [];
+    parts = explode(name, "-");
+    for mname in (all) {
+        mparts = explode(mname, "-");
+        if (listlen(parts) == listlen(mparts)) {
+            yes = 1;
+            for x in [1 .. listlen(parts)] {
+                if (!match_begin(mparts[x], parts[x])) {
+                    yes = 0;
+                    break;
+                }
+            }
+            if (yes)
+                m += [mname];
+        }
+    }
+    if (listlen(m) == 1)
+        name = m[1];
+    else if (listlen(m) > 1)
+        throw(~ambig, ("Multiple messages match the name '" + name) + "'", m);
+    else
+        throw(~nomatch, ("No messages match the name '" + name) + "'");
+    return name;
+};
+
 public method .all_defined_msgs(): nooverride  {
     var msgs, m, a;
     
@@ -38,33 +106,34 @@
 
 public method .all_msgs() {
     arg @ms;
-    var def, out, m, a, ams, av, v, b;
+    var d, out, m, a, ams, av, v, b, at;
     
     out = #[];
     if (ms)
         ms = ms[1];
     else
         ms = msgs || #[];
-    def = $compiler.compile_cml(">>NO DEFAULT<<");
+    d = $compiler.compile_cml(">>NO DEFAULT<<");
     for a in ([this()] + ancestors()) {
         if (a == definer())
             break;
         catch any {
             ams = a.msgs();
             for m in (a.defined_msgs()) {
-                v = (| ms[m[1]] |);
-                av = (| ams[m[1]] |);
+                [m, at] = m;
+                v = (| ms[m] |);
+                av = (| ams[m] |);
                 if (v) {
                     if (av)
                         v = dict_union(av, v);
                     else
-                        v = dict_union(hash b in (m[2]) to ([b, def]), v);
+                        v = dict_union(hash b in (at['branches]) to ([b, d]), v);
                 } else if (av) {
                     v = av;
                 } else {
-                    v = #[["general", def]];
+                    v = hash b in (at['branches]) to ([b, d]);
                 }
-                out = dict_add(out, m[1], v);
+                out = dict_add(out, m, v);
             }
         }
     }
@@ -142,11 +211,15 @@
 
 public method .eval_message() {
     arg name, definer, vars;
-    var eval, msg;
+    var eval, msg, varkeys;
     
     eval = (| definer.get_msg_attr(name, 'evaluator) |) || $bs_eval;
     msg = $message_frob.new_with(.get_msg(name, definer));
     vars = dict_add(vars, 'evaluator, eval);
+    if ((varkeys = (| definer.get_msg_attr(name, 'varkeys) |)))
+        vars = dict_add(vars, 'varkeys, varkeys);
+    else
+        vars = dict_add(vars, 'varkeys, 0);
     msg = msg.set_vars(vars);
     vars = dict_add(vars, 'time, 'pre);
     return msg.eval_ctext(vars);
@@ -176,6 +249,12 @@
     return edit_types || [];
 };
 
+public method .get_local_msg() {
+    arg name;
+    
+    return msgs[name];
+};
+
 public method .get_msg() {
     arg name, definer;
     var get;
@@ -242,12 +321,28 @@
             }
         }
     }
-    catch ~objnf, ~ambig {
+    catch any {
         return (> env.match_object(str) <);
     } with {
+        if (error() == ~badfrob) {
+            target = (traceback()[1])[3];
+            obj = frob_value(target)['location];
+            obj.del_frob_from_contents(target);
+            throw(~badfrob, "Cleaned up bogus frob in your environment, try again..");
+        }
         if (error() == ~objnf)
             throw(~objnf, ("You do not see " + (str.add_indefinite())) + " anywhere.");
-        throw(~ambig, ((("\"" + str) + "\" can match ") + ((((traceback()[1])[3]).mmap('namef, 'ref)).to_english("", " or "))) + ".");
+        if (error() == ~ambig) {
+            found = filter obj in ((traceback()[1])[3]) where ((obj.name()) == str);
+            if (listlen(found) == 1)
+                return found[1];
+            if (found)
+                found = (found.mmap('namef, 'ref)).to_english("", " or ");
+            else
+                found = (((traceback()[1])[3]).mmap('namef, 'ref)).to_english("", " or ");
+            throw(~ambig, ((("\"" + str) + "\" can match ") + found) + ".");
+        }
+        rethrow(error());
     }
 };
 
@@ -270,6 +365,44 @@
     return msgs || #[];
 };
 
+public method .parse_msg(): nooverride  {
+    arg name, branch;
+    var parser, name, def, b, parts, x, yes, m, mb, full, varkeys;
+    
+    if (!(def = (| .msg_definer(name) |))) {
+        name = (> ._parse_msg_part(name, (.all_msgs()).keys()) <);
+        def = (> .msg_definer(name) <);
+    }
+    if (!branch)
+        return [def, name, "general"];
+    if (listlen(branch) > 2)
+        throw(~badmsg, "Too many message branches");
+    m = [];
+    varkeys = (| def.get_msg_attr(name, 'varkeys) |) || #[];
+    for b in ((> def.get_msg_attr(name, 'branches) <)) {
+        parts = explode(b, ".", "b");
+        full = [];
+        if (dict_contains(varkeys, parts[1])) {
+            if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |)))
+                full += [mb] + sublist(branch, 2);
+        } else if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |))) {
+            full += [mb];
+        }
+        if (full)
+            m += [full];
+    }
+    branch = branch.join(".");
+    if (listlen(m) == 1)
+        full = m[1];
+    else if (listlen(m) > 1)
+        throw(~ambig, ("Multiple branches match the name '" + branch) + "'", m);
+    else
+        throw(~nomatch, ((("No branches of " + name) + " match '") + branch) + "'");
+    if ((parser = (| def.get_msg_attr(name, 'parser) |)))
+        return .(parser)(def, name, @full);
+    return [def, name, join(full, ".")];
+};
+
 public method .set_edit_types(): nooverride  {
     arg t;
     
@@ -280,14 +413,15 @@
 
 public method .set_msg(): nooverride  {
     arg name, branch, definer, value;
-    var compiler, branches, msg, definer;
+    var compiler, branches, msg, definer, b;
     
     (> .perms(sender()) <);
     compiler = (| definer.get_msg_attr(name, 'compiler) |) || $compiler;
     value = (> compiler.compile_cml(value) <);
     branch ?= "general";
-    if (!(branch in (definer.get_msg_attr(name, 'branches))))
-        throw(~badbranch, ((("Message branch \"" + name) + ".") + branch) + "\" is not defined.");
+    branches = definer.get_msg_attr(name, 'branches);
+    if ((!find b in (branches) where (match_pattern(branch, b) != 0)) && match_pattern(branch + ".", b))
+        throw(~badbranch, ("Message branch \"" + branch) + "\" is invalid.");
     msgs ?= #[];
     msg = dict_add((| msgs[name] |) || #[], branch, value);
     msgs = dict_add(msgs, name, msg);
@@ -295,23 +295,19 @@
 
 public method .set_msg_attr(): nooverride  {
     arg name, attr, value;
-    var attrs, branch;
+    var attrs;
     
     (> .perms(sender()) <);
     if ((!defined_msgs) || (!dict_contains(defined_msgs, name)))
         throw(~msgnf, (("Message \"" + name) + "\" is not defined on ") + this());
-    if (attr == 'branches) {
-        if (!value)
-            value = ["general"];
-        for branch in (value) {
-            if (!($code_lib.valid_message_id(branch)))
-                throw(~msgbad, ((("Message branch \"" + name) + ".") + branch) + "\" contains invalid characters.");
-        }
-    }
+    if (attr == 'branches)
+        [attrs, value] = (> ._parse_msg_branches(name, attr, value) <);
+    else
+        attrs = defined_msgs[name];
     if (!value)
-        attrs = dict_del(defined_msgs[name], attr);
+        attrs = dict_del(attrs, attr);
     else
-        attrs = dict_add(defined_msgs[name], attr, value);
+        attrs = dict_add(attrs, attr, value);
     defined_msgs = dict_add(defined_msgs, name, attrs);
 };
 
diff -rwu ColdCore-3.0a9.02/src/frob.cdc ColdCore-3.0a10/src/frob.cdc
--- ColdCore-3.0a9.02/src/frob.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/frob.cdc	Sat Mar 14 15:49:07 1998
@@ -2,7 +2,6 @@
 new object $frob: $core;
 
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$frob];
diff -rwu ColdCore-3.0a9.02/src/generic_map.cdc ColdCore-3.0a10/src/generic_map.cdc
--- ColdCore-3.0a9.02/src/generic_map.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/generic_map.cdc	Sat Mar 14 15:49:03 1998
@@ -11,6 +11,7 @@
 var $located obvious = 1;
 var $root created_on = 840768594;
 var $root flags = ['variables, 'methods, 'code, 'core];
+var $root help_node = $help_obj_generic_map;
 var $root inited = 1;
 var $root managed = [$generic_map];
 var $root manager = $generic_map;
diff -rwu ColdCore-3.0a9.02/src/guest.cdc ColdCore-3.0a10/src/guest.cdc
--- ColdCore-3.0a9.02/src/guest.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/guest.cdc	Sat Mar 14 15:49:05 1998
@@ -4,6 +4,7 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache modules = [];
 var $described prose = [];
 var $has_commands local = #[];
 var $has_name name = ['prop, "Generic Guest Object", "Generic Guest Object"];
@@ -20,7 +21,7 @@
 var $mail_ui current = #[['location, 0], ['list, $guest]];
 var $mail_ui subscribed = #[[$guest, [791485891, 0]]];
 var $root created_on = 796268969;
-var $root flags = ['methods, 'code, 'variables, 'core, 'command_cache];
+var $root flags = ['methods, 'code, 'variables, 'core, 'general_cache];
 var $root inited = 1;
 var $root managed = [$guest];
 var $root manager = $guest;
@@ -38,6 +38,19 @@
 
 root method .init_guest() {
     .set_title("a guest");
+};
+
+protected method .login_notify(): forked  {
+    arg connection, last;
+    var msg;
+    
+    (| pass(connection, last) |);
+    .tell(["**", "** Welcome to " + ($motd.server_name()), "**"]);
+    if ((msg = $motd.welcome_notes()))
+        .tell((msg.prefix("** ")) + ["**"]);
+    .tell(["** If you are new to ColdCore, you may want to enter the Introductory", "** Tutorial by typing:", "**", "**     @tutorial", "**"]);
+    msg = ((("GUEST: " + (.name())) + " [") + (connection.address())) + "] ";
+    $channel_ui._broadcast('Admin, msg + (.user_info("email")));
 };
 
 protected method .logout() {
diff -rwu ColdCore-3.0a9.02/src/has_commands.cdc ColdCore-3.0a10/src/has_commands.cdc
--- ColdCore-3.0a9.02/src/has_commands.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/has_commands.cdc	Sat Mar 14 15:49:02 1998
@@ -5,7 +5,6 @@
 var $has_commands remote = 0;
 var $has_commands shortcuts = #[];
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$has_commands];
@@ -37,6 +36,10 @@
     if (!get_var(type))
         set_var(type, #[]);
     set_var(type, get_var(type).setadd_elem((cmd[1])[1], [@cmd[1], template, method, cmd[2]]));
+    if (type == 'remote)
+        $remote_cache.add_remote_command((cmd[1])[1], this());
+    else if (('general_cache in (.flags())) || (.command_cache()))
+        (| .rehash_cache() |);
 };
 
 public method .add_shortcut() {
@@ -116,6 +116,8 @@
         for c in (type[2]) {
             if (((c[3]) == template) && ((c[4]) == method)) {
                 set_var(type[1], get_var(type[1]).del_elem(cmd, c));
+                if ((type[1]) == 'remote)
+                    $remote_cache.del_remote_command(cmd, this());
                 d++;
             }
         }
diff -rwu ColdCore-3.0a9.02/src/has_name.cdc ColdCore-3.0a10/src/has_name.cdc
--- ColdCore-3.0a9.02/src/has_name.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/has_name.cdc	Sat Mar 14 15:49:02 1998
@@ -4,7 +4,6 @@
 var $has_name name = ['normal, "named object", "a named object"];
 var $has_name templates = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$has_name];
@@ -34,7 +33,7 @@
 public method .hname() {
     arg @args;
     
-    return ((("<a href=\"/bin/describe?target=" + (.objname())) + "\">") + (.name())) + "</a>";
+    return ((("<a href=\"/bin/describe?target=" + (.objname())) + "\">") + ((.name()).to_html())) + "</a>";
 };
 
 public method .init_has_name() {
@@ -94,6 +93,8 @@
             return ((this() + " (") + (.name())) + ")";
         case 'name:
             return .name();
+        case 'noarticle:
+            return .name('noarticle);
         default:
             return (> pass(type) <);
     }
@@ -104,15 +104,8 @@
     var type;
     
     (> .perms(sender()) <);
-    if (new_name && ((new_name[1]) in ["$", "#"]))
-        throw(~invname, "Names cannot begin with \"$\" or \"#\".");
-    if (type(new_name) != 'string)
-        throw(~type, "New name must be given as a string.");
     [(type ?= 'normal)] = args;
-    if ((type != 'prop) && (new_name.match_regexp("^(a|an|the) +")))
-        throw(~bad_name, "Config error: articles included in unique or normal name.");
-    if (!(type in ['prop, 'normal, 'uniq]))
-        throw(~invarg, "Type must be one of: 'prop, 'normal or 'uniq");
+    (> $code_lib.valid_name(new_name, type) <);
     switch (type) {
         case 'prop:
             new_name = [new_name, new_name];
diff -rwu ColdCore-3.0a9.02/src/has_text.cdc ColdCore-3.0a10/src/has_text.cdc
--- ColdCore-3.0a9.02/src/has_text.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/has_text.cdc	Sat Mar 14 15:49:03 1998
@@ -4,7 +4,6 @@
 var $has_text text = 0;
 var $root created_on = 796268969;
 var $root defined_settings = #[["plaintext", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root help_node = $help_obj_has_text;
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_build_places.cdc ColdCore-3.0a10/src/help_build_places.cdc
--- ColdCore-3.0a9.02/src/help_build_places.cdc	Sat Mar 14 15:54:14 1998
+++ ColdCore-3.0a10/src/help_build_places.cdc	Sat Mar 14 15:49:11 1998
@@ -2,9 +2,9 @@
 new object $help_build_places: $help_building;
 
 var $has_name name = ['prop, "Places", "Places"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A location is simply anywhere in the Virtual Environment that another object can reside. Locations can also be located themselves, such as a box which can hold something and also be located in a location. A place is a type of location. Places are generally not located themselves, such as a room in a building, or a sidewalk outside of the building. This type of location is derived from the $place object. Places have several different attributes aside from their contents and ", <$format, ["link", [["node", "$help_build_app"]], ["appearance"], 'do_link]>, ", namely their realm, entrances and exits and the environment conditions. Further topics on places:", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_places_realms"]], ["Realms"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_places_exen"]], ["Exits and Entrances"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_places_env"]], ["Environment Conditions"], 'do_link]>], 'do_li]>], 'do_ul]>], #[['this, $help_build_places]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A Location is simply anywhere in the Virtual Environment that another object can reside. Locations can also be located themselves, such as a box which can hold something and also be located in a location. ", <$format, ["np", [], [], 'do_np]>, "A Place is a type of location, which define additional information about themselves. Places are generally not located themselves, such as a room in a building, or a sidewalk outside of the building. Places additionally define ", <$format, ["link", [["node", "$help_places_paths"]], ["Pathways"], 'do_link]>, " to other Places, ", <$format, ["link", [["node", "$help_places_realms"]], ["Realms"], 'do_link]>, " and ", <$format, ["link", [["node", "$help_places_env"]], ["Environment Conditions"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, "See Also: ", <$format, ["link", [["node", "$help_places_realms"]], ["Realms"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_places_paths"]], ["Pathways"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_places_env"]], ["Environment Conditions"], 'do_link]>, "."], #[['links, #[["Pathways", "$help_places_paths"], ["Realms", "$help_places_realms"], ["Environment Conditions", "$help_places_env"]]]]]>;
 var $help_node index = $help_index_core;
-var $help_node links = #[["appearance", $help_appearance], ["Realms", $help_places_realms], ["Exits and Entrances", $help_places_paths], ["Environment Conditions", $help_places_env]];
+var $help_node links = #[["Pathways", $help_places_paths], ["Realms", $help_places_realms], ["Environment Conditions", $help_places_env]];
 var $help_node nolist = 0;
 var $root created_on = 855981673;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_building.cdc ColdCore-3.0a10/src/help_building.cdc
--- ColdCore-3.0a9.02/src/help_building.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_building.cdc	Sat Mar 14 15:49:11 1998
@@ -2,9 +2,9 @@
 new object $help_building: $help_coldcore;
 
 var $has_name name = ['prop, "Building", "Building"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Building in ColdCore is considered anything from describing yourself or an object you carry, to designing and creating full areas.", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_theme"]], ["Theme"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["The VR Theme"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_cml"]], ["Dynamic Text"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["The Cold text Markup Language"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_build_places"]], ["Places"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["How Places work"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], ["Commands"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Overview of Building Commands"], 'do_dd]>], 'do_dl]>], #[['this, $help_building]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Building in ColdCore is considered anything from describing yourself or an object you carry, to designing and creating full areas.", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_theme"]], ["Theme"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["The VR Theme"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_cml"]], ["Dynamic Text"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["The Cold text Markup Language"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_build_places"]], ["Places"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["How Places work"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_building_commands"]], ["Commands"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Overview of Building Commands"], 'do_dd]>], 'do_dl]>], #[['links, #[["Theme", "$help_theme"], ["Dynamic Text", "$help_cml"], ["Places", "$help_build_places"], ["Commands", "$help_building_commands"]]]]]>;
 var $help_node index = $help_index_core;
-var $help_node links = #[["Theme", $help_theme], ["Dynamic Text", $help_cml], ["Places", $help_build_places]];
+var $help_node links = #[["Theme", $help_theme], ["Dynamic Text", $help_cml], ["Places", $help_build_places], ["Commands", $help_building_commands]];
 var $help_node nolist = 0;
 var $root created_on = 847060847;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_cmd_ancestors.cdc ColdCore-3.0a10/src/help_cmd_ancestors.cdc
--- ColdCore-3.0a9.02/src/help_cmd_ancestors.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_cmd_ancestors.cdc	Sat Mar 14 15:49:21 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@ancestors", "@ancestors"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@ancestors <objref> [<levels>]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command shows an object's ancestors. If <level> is present, it will additionally recursively show the ancestors of each parent an object has, to the depth specified by <levels>.", <$format, ["p", [], [], 'do_p]>, "See also ", <$format, ["link", [["node", "$help_cmd_descendants"]], ["@descendants"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@ancestor $vampire 2\nAncestors of $vampire:2 levels:\n$vampire [-----] (MI)\n  $admin [*-mvcC]\n    $programmer [*-mvcC] (MI)\n  $antisocial [*fmvcC]\n    $user_interfaces [*fmvc]\n"], 'do_quote]>], 'do_dfn]>], #[['links, #[["@descendants", "$help_cmd_descendants"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@ancestors <objref> [<levels>]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command shows an object's ancestors. If <level> is present, it will additionally recursively show the ancestors of each parent an object has, to the depth specified by <levels>.", <$format, ["p", [], [], 'do_p]>, "See also ", <$format, ["link", [["node", "$help_cmd_descendants"]], ["@descendants"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@ancestors $vampire 2\nAncestors of $vampire:2 levels:\n$vampire [-----] (MI)\n  $admin [*-mvcC]\n    $programmer [*-mvcC] (MI)\n  $antisocial [*fmvcC]\n    $user_interfaces [*fmvc]\n"], 'do_quote]>], 'do_dfn]>], #[['links, #[["@descendants", "$help_cmd_descendants"]]]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[["@descendants", $help_cmd_descendants]];
 var $root created_on = 870646587;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_attach.cdc ColdCore-3.0a10/src/help_cmd_attach.cdc
--- ColdCore-3.0a9.02/src/help_cmd_attach.cdc	Sat Mar 14 15:54:26 1998
+++ ColdCore-3.0a10/src/help_cmd_attach.cdc	Sat Mar 14 15:49:21 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@attach", "@attach"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@attach <place1> to <place2>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command attaches an exit from <place1> to <place2>. It will prompt for the name of the exit, and a description for the exit.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_places_exen"]], ["Exits and Entrances"], 'do_link]>], #[['links, #[["@build", "$help_cmd_build"], ["Exits and Entrances", "$help_places_exen"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@attach <place1> to <place2>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command attaches an exit from <place1> to <place2>. It will prompt for the name of the exit, and a description for the exit.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_places_paths"]], ["Exits and Entrances"], 'do_link]>], #[['links, #[["@build", "$help_cmd_build"], ["Exits and Entrances", "$help_places_paths"]]]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[["@build", $help_cmd_build], ["Exits and Entrances", $help_places_paths]];
 var $root created_on = 870659823;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_audit.cdc ColdCore-3.0a10/src/help_cmd_audit.cdc
--- ColdCore-3.0a9.02/src/help_cmd_audit.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_cmd_audit.cdc	Sat Mar 14 15:49:21 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@audit", "@audit"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@audit <objref> [+f?ull]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Displays how much quota (in bytes) <objref> is using, how much it can use, and how much is remaining. With the +full option, @audit additionally displays the name, number of bytes, and location of each object that <objref> owns. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@audit Vampire\nObjects managed by Vampire ($vampire):      bytes Location\n  $vampire (Vampire)                        6,701 [The Pit]\n  $note_79 (UI_stuff)                         492 [Vampire]\n  $thing_265 (parser)                         406 [Vampire]\n  $help_cmd_addshortcut (@add-s?hortcut       414\nTotal usage: 27,885 bytes\nTotal quota: 75,000 bytes\nRemaining:   47,115 bytes\n"], 'do_quote]>], 'do_dfn]>], #[]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@audit <objref> [+f?ull]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Displays how much quota (in bytes) <objref> is using, how much it can use, and how much is remaining. With the +full option, @audit additionally displays the name, number of bytes, and location of each object that <objref> owns. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@audit Vampire +full\nObjects managed by Vampire ($vampire):      bytes Location\n  $vampire (Vampire)                        6,701 [The Pit]\n  $note_79 (UI_stuff)                         492 [Vampire]\n  $thing_265 (parser)                         406 [Vampire]\n  $help_cmd_addshortcut (@add-s?hortcut       414\nTotal usage: 27,885 bytes\nTotal quota: 75,000 bytes\nRemaining:   47,115 bytes\n"], 'do_quote]>], 'do_dfn]>], #[]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[];
 var $root created_on = 870925742;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_build.cdc ColdCore-3.0a10/src/help_cmd_build.cdc
--- ColdCore-3.0a9.02/src/help_cmd_build.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_cmd_build.cdc	Sat Mar 14 15:49:21 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@build", "@build"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@build"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This is a meta command which takes you step by step through the process of extending your VR surroundings. From opening an exit to/from the new location, creating the location itself, setting the location's realm, and setting all of the descriptions for the location, and the exits to and from it."], #[]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@build"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This is the interactive build command, which takes you step by step through the process of extending your VR surroundings. From creating a path to/from the new place, creating the place itself, setting the place's realm, and setting all of the descriptions for the place, and the ways to and from it. ", <$format, ["np", [], [], 'do_np]>, "To use this command simply go to the place you wish to extend, and type ", <$format, ["tt", [], ["@build"], 'do_tt]>, ". It will prompt you for all of the information to build another place connected to your current location."], #[]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[];
 var $root created_on = 870664087;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_defmsg.cdc ColdCore-3.0a10/src/help_cmd_defmsg.cdc
--- ColdCore-3.0a9.02/src/help_cmd_defmsg.cdc	Sat Mar 14 15:40:47 1998
+++ ColdCore-3.0a10/src/help_cmd_defmsg.cdc	Sat Mar 14 15:49:24 1998
@@ -2,7 +2,7 @@
 new object $help_cmd_defmsg: $help_sys_message;
 
 var $has_name name = ['prop, "@def-msg|@undef-msg", "@def-msg|@undef-msg"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: `", <$format, ["tt", [], ["@def-msg|@undef-msg <target>:<msg> [options]"], 'do_tt]>, "` ", <$format, ["np", [], [], 'do_np]>, "This command is used to define and undefine a message base. Because multiple branches for one base can exist, you cannot define the default values for the message with this command, use ", <$format, ["link", [["node", "$help_cmd_msg"]], ["@msg"], 'do_link]>, " for this instead, after the message is defined. More information on Messages can be found in the section ", <$format, ["link", [["node", "$help_sys_message"]], ["Messages"], 'do_link]>, ". Options can be: ", <$format, ["dfn", [["nobound", 1]], [<$format, ["table", [["cols", "25%,75%"]], [<$format, ["tr", [], [<$format, ["td", [], ["+b?ranches"], 'do_td]>, <$format, ["td", [], ["Define the branches, in a comma delimited list."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+c?ompiler"], 'do_td]>, <$format, ["td", [], ["Define the compiler. Defaults to $compiler."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+e?valuator"], 'do_td]>, <$format, ["td", [], ["Define the evaluator. Defaults to $bs_eval."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+g?etter"], 'do_td]>, <$format, ["td", [], ["Define the getter. Defaults to 'standard_get_msg"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "An example of defining the message \"open\" with the branches \"actor\" and \"general\":", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@def-msg mybox:open +b=general,actor", <$format, ["br", [], [], 'do_br]>, "@msg mybox:open = General Message", <$format, ["br", [], [], 'do_br]>, "@msg mybox:open.actor = Actor's Message"], 'do_dfn]>], #[['links, #[["@msg", "$help_cmd_msg"], ["Messages", "$help_sys_message"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: `", <$format, ["tt", [], ["@def-msg|@undef-msg <target>:<msg> [options]"], 'do_tt]>, "` ", <$format, ["np", [], [], 'do_np]>, "This command is used to define and undefine a message base. Because multiple branches for one base can exist, you cannot define the default values for the message with this command, use ", <$format, ["link", [["node", "$help_cmd_msg"]], ["@msg"], 'do_link]>, " for this instead, after the message is defined. More information on Messages can be found in the section ", <$format, ["link", [["node", "$help_sys_message"]], ["Messages"], 'do_link]>, ". Options can be: ", <$format, ["dfn", [["nobound", 1]], [<$format, ["table", [["cols", "25%,75%"]], [<$format, ["tr", [], [<$format, ["td", [], ["+b?ranches"], 'do_td]>, <$format, ["td", [], ["Define the branches, in a comma delimited list."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+c?ompiler"], 'do_td]>, <$format, ["td", [], ["Define the compiler. Defaults to $compiler."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+e?valuator"], 'do_td]>, <$format, ["td", [], ["Define the evaluator. Defaults to $bs_eval."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["+g?etter"], 'do_td]>, <$format, ["td", [], ["Define the getter. Defaults to 'standard_get_msg"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "An example of defining the message \"open\" with the branches \"actor\" and \"general\":", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@def-msg mybox:open +b=general,actor", <$format, ["br", [], [], 'do_br]>, "@msg mybox:open = General Message", <$format, ["br", [], [], 'do_br]>, "@msg mybox:open.actor = Actor's Message"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "You can also specify a two-part branch, with the final part being variable. What this means is the third part of the message name can be variable, and when the message is evaluated the appropriate branch will be used--if it exists. For instance, the message ", <$format, ["tt", [], ["\"invoke\""], 'do_tt]>, " on ", <$format, ["tt", [], ["$path"], 'do_tt]>, " has the branch ", <$format, ["tt", [], ["\"source\""], 'do_tt]>, " which is variable--meaning you add a third part to it. In this example the third part is a way for the path--i.e. one of its sources or destinations. So a possible message set for this would look like:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["invoke.source = [actor] goes through [this].", <$format, ["br", [], [], 'do_br]>, "invoke.source.courtyard = [actor] leaves the courtyard."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "In this example, the default 'source' is used for all messages unless the source is the courtyard, when the second message is used instead. ", <$format, ["np", [], [], 'do_np]>, "Variable messages are specified when defining the branches--in one of two wa ys. Either an asterisk character is placed where the variable portion should be, or a unique token specified in parenthesis is placed there, such as:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["invoke.actor.($source)"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If no token is specified, then a dollar sign followed by the branch name is used instead. When evaluating the message the interpreter will look for a ctext variable by that name. If it exists, it will build a branch using the objname of the value of that variable, such as:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["source.place_621"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If this branch is defined, then it will use it instead of the default branch."], #[['links, #[["@msg", "$help_cmd_msg"], ["Messages", "$help_sys_message"]]]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[["@msg", $help_cmd_msg], ["Messages", $help_sys_message]];
 var $root created_on = 856118984;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_dig.cdc ColdCore-3.0a10/src/help_cmd_dig.cdc
--- ColdCore-3.0a9.02/src/help_cmd_dig.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_cmd_dig.cdc	Sat Mar 14 15:49:21 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@dig", "@dig"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@dig <place>"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@dig <leaving exit>[;<arriving exit>] to <place>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The first form of this command creates a new <place>, and informs you of the $name of the new <place>, so that you can more easily manipulate it later with the other building commands. ", <$format, ["np", [], [], 'do_np]>, "The second form of the command allows tou to attach a <leaving exit> and optionally, an <arriving exit> to <place>.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_attach"]], ["@attach"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>], #[['links, #[["@attach", "$help_cmd_attach"], ["@build", "$help_cmd_build"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["BUILDER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@dig <place>"], 'do_tt]>, <$format, ["br", [], [], 'do_br]>, "Syntax: ", <$format, ["tt", [], ["@dig <leaving way>[|<arriving way>] to <place>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The first form of this command creates a new place, with the name being whatever you specify for <place>. The object name for the new place will be displayed, for easy reference later. ", <$format, ["np", [], [], 'do_np]>, "The second form of the command works the same as the first, but also allows you to define a path and attach leaving and arriving ways for the path, at the same time the place is created. This path will be linked from your current location to the new place. Example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@dig north|south to Hallway"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This will create a new place named ", <$format, ["tt", [], ["\"Hallway\""], 'do_tt]>, " and will build a path with ", <$format, ["tt", [], ["\"north\""], 'do_tt]>, " going from the current location to the Hallway (e.g. leaving), and ", <$format, ["tt", [], ["\"south\""], 'do_tt]>, " going from the Hallway to the current location (e.g. arriving). ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_cmd_attach"]], ["@attach"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>], #[['links, #[["@attach", "$help_cmd_attach"], ["@build", "$help_cmd_build"]]]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[["@attach", $help_cmd_attach], ["@build", $help_cmd_build]];
 var $root created_on = 870664099;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_help.cdc ColdCore-3.0a10/src/help_cmd_help.cdc
--- ColdCore-3.0a9.02/src/help_cmd_help.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_cmd_help.cdc	Sat Mar 14 15:49:21 1998
@@ -3,9 +3,9 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "@help", "@help"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@help <topic>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See ", <$format, ["link", [["node", "$help_help"]], ["Help"], 'do_link]>, "."], #[['links, #[["Help", "$help_help"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@help [topic] [options]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command is explained in greater detail, in the section ", <$format, ["link", [["node", "$help_help"]], ["Using the Help System"], 'do_link]>, "."], #[['links, #[["Using the Help System", "$help_help"]]]]]>;
 var $help_node index = $help_index_cmds;
-var $help_node links = #[["Help", $help_help]];
+var $help_node links = #[["Using the Help System", $help_help]];
 var $root created_on = 870763088;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_newpwd.cdc ColdCore-3.0a10/src/help_cmd_newpwd.cdc
--- ColdCore-3.0a9.02/src/help_cmd_newpwd.cdc	Sat Mar 14 15:40:43 1998
+++ ColdCore-3.0a10/src/help_cmd_newpwd.cdc	Sat Mar 14 15:49:19 1998
@@ -1,7 +1,7 @@
 
 new object $help_cmd_newpwd: $help_cmds;
 
-var $has_name name = ['prop, "@new-password", "@new-password"];
+var $has_name name = ['prop, "@new-password|@newpwd", "@new-password|@newpwd"];
 var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["ADMIN COMMAND"], 'do_b]>, " ", <$format, ["p", [], [], 'do_p]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@new-password|@newpw?d <user>"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["p", [], [], 'do_p]>, "Used to generate a new random password for the specified user. The password is printed to the admin running the command, and is emailed to the user. Example: ", <$format, ["p", [], [], 'do_p]>, " ", <$format, ["dfn", [], ["@newpw Billy Bob"], 'do_dfn]>], #[['this, $help_cmd_newpwd]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[];
diff -rwu ColdCore-3.0a9.02/src/help_cmd_remember.cdc ColdCore-3.0a10/src/help_cmd_remember.cdc
--- ColdCore-3.0a9.02/src/help_cmd_remember.cdc	Sat Mar 14 15:40:44 1998
+++ ColdCore-3.0a10/src/help_cmd_remember.cdc	Sat Mar 14 15:49:20 1998
@@ -2,9 +2,9 @@
 new object $help_cmd_remember: $help_cmds;
 
 var $has_name name = ['prop, "@remember", "@remember"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: `", <$format, ["tt", [], ["@remember <item> as <what>"], 'do_tt]>, "` ", <$format, ["np", [], [], 'do_np]>, "Using this command you can alias something which is either hard to type or hard to remember, so that later you can reference it with the new alias you set to it, rather than it's full name. Remembered items do not have to be in the environment for them to be matched. This is also useful, as you do not need to remember full object names. An example would be:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@remember $robot_1512 as fred"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If you do this, you will be able to reference ", <$format, ["tt", [], ["$robot_1512"], 'do_tt]>, " as ", <$format, ["tt", [], ["fred"], 'do_tt]>, ", even if it is not in your environment. This can potentially cause conflicts, as anything remembered is given priority over anything in your environment."], #[['this, $help_cmd_remember]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@remember <item> as <what>"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, "Using this command you can alias something which is either hard to type or hard to remember, so that later you can reference it with the new alias you set to it, rather than it's full name. Remembered items do not have to be in the environment for them to be matched. This is also useful, as you do not need to remember full object names. An example would be:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@remember $robot_1512 as fred"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If you do this, you will be able to reference ", <$format, ["tt", [], ["$robot_1512"], 'do_tt]>, " as ", <$format, ["tt", [], ["fred"], 'do_tt]>, ", even if it is not in your environment. This can potentially cause conflicts, as anything remembered is given priority over anything in your environment.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_remembered"]], ["@remembered"], 'do_link]>], #[['links, #[["@remembered", "$help_cmd_remembered"]]]]]>;
 var $help_node index = $help_index_cmds;
-var $help_node links = #[];
+var $help_node links = #[["@remembered", $help_cmd_remembered]];
 var $root created_on = 856651645;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_cmd_spoof.cdc ColdCore-3.0a10/src/help_cmd_spoof.cdc
--- ColdCore-3.0a9.02/src/help_cmd_spoof.cdc	Sat Mar 14 15:40:43 1998
+++ ColdCore-3.0a10/src/help_cmd_spoof.cdc	Sat Mar 14 15:49:19 1998
@@ -2,7 +2,7 @@
 new object $help_cmd_spoof: $help_cmds;
 
 var $has_name name = ['prop, "spoof", "spoof"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The interaction command ", <$format, ["tt", [], ["spoof"], 'do_tt]>, " is used similar to ", <$format, ["link", [["node", "$help_cmd_emote"]], ["emote"], 'do_link]>, ", except your name does not start the line. This is usually used to format your actions in a different way, but can be used to 'spoof' actions from other players--which can be considered rude (be careful when using it so as to not offend anybody). If your name does not appear in the line, it will be appended for attribution. For convenience, the exclaimation point may also be used as a shortcut. Examples:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["> spoof Miro slips and falls.", <$format, ["br", [], [], 'do_br]>, "Miro slips and falls. -- Brandon"], 'do_dfn]>, " ", <$format, ["dfn", [], ["> !The big beast pounces on Brandon, pummelling him silly", <$format, ["br", [], [], 'do_br]>, "The big beast pounces on Brandon, pummelling him silly"], 'do_dfn]>], #[['this, $help_cmd_spoof]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The interaction command ", <$format, ["tt", [], ["spoof"], 'do_tt]>, " is used similar to ", <$format, ["link", [["node", "$help_cmd_emote"]], ["emote"], 'do_link]>, ", except your name does not start the line. This is usually used to format your actions in a different way, but can be used to 'spoof' actions from other players--which can be considered rude (be careful when using it so as to not offend anybody). If your name does not appear as a word in the line, it will be appended for attribution. For convenience, the exclaimation point may also be used as a shortcut. Examples:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["> spoof Miro slips and falls.", <$format, ["br", [], [], 'do_br]>, "Miro slips and falls. -- Brandon"], 'do_dfn]>, " ", <$format, ["dfn", [], ["> !The big beast pounces on Brandon, pummelling him silly", <$format, ["br", [], [], 'do_br]>, "The big beast pounces on Brandon, pummelling him silly"], 'do_dfn]>], #[['links, #[["emote", "$help_cmd_emote"]]]]]>;
 var $help_node index = $help_index_cmds;
 var $help_node links = #[["emote", $help_cmd_emote]];
 var $root created_on = 847043939;
diff -rwu ColdCore-3.0a9.02/src/help_cml.cdc ColdCore-3.0a10/src/help_cml.cdc
--- ColdCore-3.0a9.02/src/help_cml.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_cml.cdc	Sat Mar 14 15:49:11 1998
@@ -7,7 +7,6 @@
 var $help_node links = #[["Formatters", $help_cml_formatters], ["Generators", $help_cml_generators], ["Customizing", $help_cml_customizing]];
 var $help_node nolist = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$help_cml];
diff -rwu ColdCore-3.0a9.02/src/help_coldc.cdc ColdCore-3.0a10/src/help_coldc.cdc
--- ColdCore-3.0a9.02/src/help_coldc.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_coldc.cdc	Sat Mar 14 15:49:11 1998
@@ -2,7 +2,7 @@
 new object $help_coldc: $help_prog;
 
 var $has_name name = ['prop, "ColdC Reference Manual", "ColdC Reference Manual"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdC was initially created by Greg Hudson with ColdMUD, and was later developed and evolved by many enterprising individuals. ColdC is a low-profile object oriented database language. It is intended for network servers which require run-time morphism (such as Virtual/Interactive Environment Servers). ", <$format, ["np", [], [], 'do_np]>, "This reference manual is written by Brandon Gillespie, with portions being taken from the ColdMUD Reference manual written by Greg Hudson and additions by various Cold contributors.", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_oop"]], ["Object Oriented Programming"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_conventions"]], ["Conventions used in this Document"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs"]], ["ColdC Objects"], 'do_link]>], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_ref"]], ["Referencing Objects"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_methods"]], ["Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_vars"]], ["Variables"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_special"]], ["Special Objects"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], ["Language Structure"], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_tokens"]], ["Tokens"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_types"]], ["Data Types"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_expr"]], ["Expressions"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_stmts"]], ["Statements"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], ["Implementation Reference"], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_methods"]], ["Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_tasks"]], ["Frames and Tasks"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_errors"]], ["Errors"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_security"]], ["Security"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_net"]], ["Networking"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_regexp"]], ["Regular Expressions"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_files"]], ["Files"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_textdump"]], ["Textdump Structure"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_func"]], ["Function Reference"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_native"]], ["Native Method Reference"], 'do_link]>], 'do_li]>], 'do_ul]>], #[['this, $help_coldc]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdC was initially created by Greg Hudson with ColdMUD, and was later developed and evolved by many enterprising individuals. ColdC is a low-profile object oriented database language. It is intended for network servers which require run-time morphism (such as Virtual/Interactive Environment Servers). ", <$format, ["np", [], [], 'do_np]>, "This reference manual is written by Brandon Gillespie, with portions being taken from the ColdMUD Reference manual written by Greg Hudson and additions by various Cold contributors. ", <$format, ["np", [], [], 'do_np]>, "For the most part, this manual specifies the language definition for ColdC 1.1. Some sections may be in addition to this specification (such as Native Methods).", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_oop"]], ["Object Oriented Programming"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_conventions"]], ["Conventions used in this Document"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs"]], ["ColdC Objects"], 'do_link]>], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_ref"]], ["Referencing Objects"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_methods"]], ["Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_vars"]], ["Variables"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_objs_special"]], ["Special Objects"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], ["Language Structure"], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_tokens"]], ["Tokens"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_types"]], ["Data Types"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_expr"]], ["Expressions"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_stmts"]], ["Statements"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], ["Implementation Reference"], 'do_li]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_methods"]], ["Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_tasks"]], ["Frames and Tasks"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_errors"]], ["Errors"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_security"]], ["Security"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_net"]], ["Networking"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_regexp"]], ["Regular Expressions"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_files"]], ["Files"], 'do_link]>], 'do_li]>], 'do_ul]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_textdump"]], ["Textdump Structure"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_func"]], ["Function Reference"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_coldc_native"]], ["Native Method Reference"], 'do_link]>], 'do_li]>], 'do_ul]>], #[['links, #[["Object Oriented Programming", "$help_coldc_oop"], ["Conventions used in this Document", "$help_conventions"], ["ColdC Objects", "$help_coldc_objs"], ["Referencing Objects", "$help_coldc_objs_ref"], ["Methods", "$help_coldc_methods"], ["Variables", "$help_coldc_objs_vars"], ["Special Objects", "$help_coldc_objs_special"], ["Tokens", "$help_coldc_tokens"], ["Data Types", "$help_coldc_types"], ["Expressions", "$help_coldc_expr"], ["Statements", "$help_coldc_stmts"], ["Frames and Tasks", "$help_coldc_tasks"], ["Errors", "$help_coldc_errors"], ["Security", "$help_coldc_security"], ["Networking", "$help_coldc_net"], ["Regular Expressions", "$help_coldc_regexp"], ["Files", "$help_coldc_files"], ["Textdump Structure", "$help_coldc_textdump"], ["Function Reference", "$help_coldc_func"], ["Native Method Reference", "$help_coldc_native"]]]]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[["Object Oriented Programming", $help_coldc_oop], ["Conventions used in this Document", $help_conventions], ["ColdC Objects", $help_coldc_objs], ["Referencing Objects", $help_coldc_objs_ref], ["Methods", $help_coldc_methods], ["Variables", $help_coldc_objs_vars], ["Special Objects", $help_coldc_objs_special], ["Tokens", $help_coldc_tokens], ["Data Types", $help_coldc_types], ["Expressions", $help_coldc_expr], ["Statements", $help_coldc_stmts], ["Frames and Tasks", $help_coldc_tasks], ["Errors", $help_coldc_errors], ["Security", $help_coldc_security], ["Networking", $help_coldc_net], ["Regular Expressions", $help_coldc_regexp], ["Files", $help_coldc_files], ["Textdump Structure", $help_coldc_textdump], ["Function Reference", $help_coldc_func], ["Native Method Reference", $help_coldc_native]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldc_cond_switch.cdc ColdCore-3.0a10/src/help_coldc_cond_switch.cdc
--- ColdCore-3.0a9.02/src/help_coldc_cond_switch.cdc	Sat Mar 14 15:40:38 1998
+++ ColdCore-3.0a10/src/help_coldc_cond_switch.cdc	Sat Mar 14 15:49:13 1998
@@ -2,7 +2,7 @@
 new object $help_coldc_cond_switch: $help_coldc_cond_stmts;
 
 var $has_name name = ['prop, "switch", "switch"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The ", <$format, ["i", [], ["switch statement"], 'do_i]>, " is used to compare one value against a series of other values. The switch statement is the most complicated statement in ColdC, and does vary from it's counterpart in C, so rather than using abstract explanations we will start with an example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["switch (val) {\n    case 0:\n        echo(\"The value is zero.\");\n    case 1 .. 10:\n        echo(\"The value is between one and ten inclusive.\");\n    case 11 .. a:\n        echo(\"The value is between eleven and a inclusive.\");\n    case \"foo\", \"bar\"..\"baz\":\n        echo(\"The value is \\\"foo\\\" or between \\\"bar\\\" and \\\"baz\\\"\");\n    case a .. b, c .. d, 42:\n        count = count + 1;\n        echo(\"The value is in the counted area.\");\n    case ~perm:\n        echo(\"Permission denied while getting the value.\");\n    default:\n        echo(\"Did not recognize value.\");\n}"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This example illustrates all of the capabilities of the switch statement. The expression given by ", <$format, ["tt", [], ["val"], 'do_tt]>, " in the example is the ", <$format, ["i", [], ["controlling expression"], 'do_i]>, ", and is compared against each of the cases inside the switch body until a match is found. Each ", <$format, ["tt", [], ["case"], 'do_tt]>, " has a value or list of values to compare against. The values can be of any type, and need not be constant expressions. Ranges are specified using two dots (", <$format, ["tt", [], [".."], 'do_tt]>, ") to separate the lower and upper bounds. The keyword ", <$format, ["tt", [], ["default"], 'do_tt]>, " specifies an action to perform if no cases were matched by the controlling expression. ", <$format, ["np", [], [], 'do_np]>, "Here is a more formal description of the syntax of the switch statement:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["tt", [], ["switch (", <$format, ["i", [], ["controlling-expression"], 'do_i]>, ") { ", <$format, ["dfn", [["ind", "4"]], ["case ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], [".."], 'do_i]>, ": ", <$format, ["dfn", [["ind", "4"]], ["statement"], 'do_dfn]>, "case ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], [".."], 'do_i]>, ": ", <$format, ["dfn", [["ind", "4"]], ["statement"], 'do_dfn]>, <$format, ["i", [], [".."], 'do_i]>, <$format, ["br", [], [], 'do_br]>, "default: ", <$format, ["dfn", [["ind", "4"], ["nobound", 1]], [<$format, ["i", [], ["default-statement"], 'do_i]>], 'do_dfn]>], 'do_dfn]>, "}"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When executing a switch statement, the interpreter scans through the list of cases and compares the ", <$format, ["i", [], ["controlling-expression"], 'do_i]>, " against each of the cases, evaluating the case from left to right until there is a match. When using a range, the lower and upper bounds must be of the same type and must be either integers or strings. If they are not the error ", <$format, ["tt", [], ["~type"], 'do_tt]>, " is thrown. When the interpreter finds a match, it will execute the statement for that case. The interpreter will not continue checking cases after a match. ", <$format, ["np", [], [], 'do_np]>, "If the interpreter does not find a match, it will execute instead execute the ", <$format, ["i", [], ["default-statement"], 'do_i]>, ". A default statement does not need to be defined. If a default is not defined nothing in the switch is executed. ", <$format, ["np", [], [], 'do_np]>, <$format, ["tt", [], ["C"], 'do_tt]>, " programmers should note that switch statements in ColdC differ from switch statements in ", <$format, ["tt", [], ["C"], 'do_tt]>, " in several respects. Because case values do not have to be constants, they may conflict, in which case the first match will take precedence. Also, there is no fall-through in ColdC switch statements; only the statements corresponding to the matching case will be executed. Because there is no fall-through, the ", <$format, ["tt", [], ["break"], 'do_tt]>, " statement does not apply to switch statements. Finally, the default case must be placed last in the list of cases if it is given."], #[['this, $help_coldc_cond_switch]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The ", <$format, ["i", [], ["switch statement"], 'do_i]>, " is used to compare one value against a series of other values. The switch statement is the most complicated statement in ColdC, and does vary from it's counterpart in C, so rather than using abstract explanations we will start with an example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["switch (val) {\n    case 0:\n        cwrite(\"The value is zero.\");\n    case 1 .. 10:\n        cwrite(\"The value is between one and ten inclusive.\");\n    case 11 .. a:\n        cwrite(\"The value is between eleven and a inclusive.\");\n    case \"foo\", \"bar\"..\"baz\":\n        cwrite(\"The value is \\\"foo\\\" or between \\\"bar\\\" and \\\"baz\\\"\");\n    case a .. b, c .. d, 42:\n        count = count + 1;\n        cwrite(\"The value is in the counted area.\");\n    case ~perm:\n        cwrite(\"Permission denied while getting the value.\");\n    default:\n        cwrite(\"Did not recognize value.\");\n}"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This example illustrates all of the capabilities of the switch statement. The expression given by ", <$format, ["tt", [], ["val"], 'do_tt]>, " in the example is the ", <$format, ["i", [], ["controlling expression"], 'do_i]>, ", and is compared against each of the cases inside the switch body until a match is found. Each ", <$format, ["tt", [], ["case"], 'do_tt]>, " has a value or list of values to compare against. The values can be of any type, and need not be constant expressions. Ranges are specified using two dots (", <$format, ["tt", [], [".."], 'do_tt]>, ") to separate the lower and upper bounds. The keyword ", <$format, ["tt", [], ["default"], 'do_tt]>, " specifies an action to perform if no cases were matched by the controlling expression. ", <$format, ["np", [], [], 'do_np]>, "Here is a more formal description of the syntax of the switch statement:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["tt", [], ["switch (", <$format, ["i", [], ["controlling-expression"], 'do_i]>, ") { ", <$format, ["dfn", [["ind", "4"]], ["case ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], [".."], 'do_i]>, ": ", <$format, ["dfn", [["ind", "4"]], ["statement"], 'do_dfn]>, "case ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], ["expr-or-range"], 'do_i]>, ", ", <$format, ["i", [], [".."], 'do_i]>, ": ", <$format, ["dfn", [["ind", "4"]], ["statement"], 'do_dfn]>, <$format, ["i", [], [".."], 'do_i]>, <$format, ["br", [], [], 'do_br]>, "default: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["i", [], ["default-statement"], 'do_i]>], 'do_dfn]>], 'do_dfn]>, "}"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When executing a switch statement, the interpreter scans through the list of cases and compares the ", <$format, ["i", [], ["controlling-expression"], 'do_i]>, " against each of the cases, evaluating the case from left to right until there is a match. When using a range, the lower and upper bounds must be of the same type and must be either integers or strings. If they are not the error ", <$format, ["tt", [], ["~type"], 'do_tt]>, " is thrown. When the interpreter finds a match, it will execute the statement for that case. The interpreter will not continue checking cases after a match. ", <$format, ["np", [], [], 'do_np]>, "If the interpreter does not find a match, it will execute instead execute the ", <$format, ["i", [], ["default-statement"], 'do_i]>, ". A default statement does not need to be defined. If a default is not defined nothing in the switch is executed. ", <$format, ["np", [], [], 'do_np]>, <$format, ["tt", [], ["C"], 'do_tt]>, " programmers should note that switch statements in ColdC differ from switch statements in ", <$format, ["tt", [], ["C"], 'do_tt]>, " in several respects. Because case values do not have to be constants, they may conflict, in which case the first match will take precedence. Also, there is no fall-through in ColdC switch statements; only the statements corresponding to the matching case will be executed. Because there is no fall-through, the ", <$format, ["tt", [], ["break"], 'do_tt]>, " statement does not apply to switch statements. Finally, the default case must be placed last in the list of cases if it is given."], #[]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldc_forlist.cdc ColdCore-3.0a10/src/help_coldc_forlist.cdc
--- ColdCore-3.0a9.02/src/help_coldc_forlist.cdc	Sat Mar 14 15:40:38 1998
+++ ColdCore-3.0a10/src/help_coldc_forlist.cdc	Sat Mar 14 15:49:13 1998
@@ -2,7 +2,7 @@
 new object $help_coldc_forlist: $help_coldc_loop_stmts;
 
 var $has_name name = ['prop, "for-list", "for-list"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The ", <$format, ["i", [], ["for-list statement"], 'do_i]>, " is used to traverse a list. It has the following syntax:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["tt", [], ["for ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " in (", <$format, ["i", [], ["what expr"], 'do_i]>, ") ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["i", [], ["statement"], 'do_i]>], 'do_dfn]>], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, <$format, ["i", [], ["iteration variable"], 'do_i]>, " must be a local variable (it cannot be an object variable), and ", <$format, ["i", [], ["what expr"], 'do_i]>, " must be an expression resulting in a list or dictionary type. The interpreter executes ", <$format, ["i", [], ["statement"], 'do_i]>, " once for each element in ", <$format, ["i", [], ["what"], 'do_i]>, ", assigning the current element to the ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " for the iteration. Here is an example of using a for-list statement on a list:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["for s in ([\"foo\", \"bar\", \"baz\"])\n    .tell(s);"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When executed, the method ", <$format, ["i", [], ["tell"], 'do_i]>, " is called three times, the first time with an argument of ", <$format, ["tt", [], ["\"foo\""], 'do_tt]>, " (the first element in the list), the second time with ", <$format, ["tt", [], ["\"bar\""], 'do_tt]>, " (the second element in the list), and the third time with ", <$format, ["tt", [], ["\"baz\""], 'do_tt]>, " (the last element in the list). ", <$format, ["np", [], [], 'do_np]>, "When using a dictionary as ", <$format, ["i", [], ["what expr"], 'do_i]>, ", the interpreter assigns each association in the dictionary to the ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " (see ", <$format, ["link", [["node", "$help_coldc_types"]], ["Dictionaries"], 'do_link]>, "). For example, if the dictionary ", <$format, ["tt", [], ["#[['count, 21], ['name, \"foo\"]]"], 'do_tt]>, " were to be used as the ", <$format, ["i", [], ["what expr"], 'do_i]>, ", the first iteration would set ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " to ", <$format, ["tt", [], ["['count, 21]"], 'do_tt]>, ", and the second iteration would set it to ", <$format, ["tt", [], ["['name, \"foo\"]"], 'do_tt]>, ". ", <$format, ["np", [], [], 'do_np]>, "Assigning to the ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " within a for-list statement will not change the status of the loop; the interpreter remembers where it is at in ", <$format, ["i", [], ["what"], 'do_i]>, " and will continue as normal."], #[['this, $help_coldc_forlist]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The ", <$format, ["i", [], ["for-list statement"], 'do_i]>, " is used to traverse a list. It has the following syntax:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["tt", [], ["for ", <$format, ["i", [], ["iteration-variable"], 'do_i]>, " in (", <$format, ["i", [], ["what expr"], 'do_i]>, ") ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["i", [], ["statement"], 'do_i]>], 'do_dfn]>], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, <$format, ["i", [], ["iteration-variable"], 'do_i]>, " must be a local variable (it cannot be an object variable), and ", <$format, ["i", [], ["what expr"], 'do_i]>, " must be an expression resulting in a list or dictionary type. The interpreter executes ", <$format, ["i", [], ["statement"], 'do_i]>, " once for each element in ", <$format, ["i", [], ["what"], 'do_i]>, ", assigning the current element to the ", <$format, ["i", [], ["iteration-variable"], 'do_i]>, " for the iteration. Here is an example of using a for-list statement on a list:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["for s in ([\"foo\", \"bar\", \"baz\"])\n    .tell(s);"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When executed, the method ", <$format, ["i", [], ["tell"], 'do_i]>, " is called three times, the first time with an argument of ", <$format, ["tt", [], ["\"foo\""], 'do_tt]>, " (the first element in the list), the second time with ", <$format, ["tt", [], ["\"bar\""], 'do_tt]>, " (the second element in the list), and the third time with ", <$format, ["tt", [], ["\"baz\""], 'do_tt]>, " (the last element in the list). ", <$format, ["np", [], [], 'do_np]>, "When using a dictionary as ", <$format, ["i", [], ["what expr"], 'do_i]>, ", the interpreter assigns each association in the dictionary to the ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " (see ", <$format, ["link", [["node", "$help_coldc_types"]], ["Dictionaries"], 'do_link]>, "). For example, if the dictionary ", <$format, ["tt", [], ["#[['count, 21], ['name, \"foo\"]]"], 'do_tt]>, " were to be used as the ", <$format, ["i", [], ["what expr"], 'do_i]>, ", the first iteration would set ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " to ", <$format, ["tt", [], ["['count, 21]"], 'do_tt]>, ", and the second iteration would set it to ", <$format, ["tt", [], ["['name, \"foo\"]"], 'do_tt]>, ". ", <$format, ["np", [], [], 'do_np]>, "Assigning to the ", <$format, ["i", [], ["iteration variable"], 'do_i]>, " within a for-list statement will not change the status of the loop; the interpreter remembers where it is at in ", <$format, ["i", [], ["what"], 'do_i]>, " and will continue as normal."], #[['links, #[["Dictionaries", "$help_coldc_types"]]]]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[["Dictionaries", $help_coldc_types]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldc_types_buffers.cdc ColdCore-3.0a10/src/help_coldc_types_buffers.cdc
--- ColdCore-3.0a9.02/src/help_coldc_types_buffers.cdc	Sat Mar 14 15:40:36 1998
+++ ColdCore-3.0a10/src/help_coldc_types_buffers.cdc	Sat Mar 14 15:49:12 1998
@@ -2,7 +2,7 @@
 new object $help_coldc_types_buffers: $help_coldc_types;
 
 var $has_name name = ['prop, "Buffer", "Buffer"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["buffer"], 'do_i]>, " is an array of integers which are interpreted to unsigned eight-bit values. Keep this in mind, as the range of an integer in a buffer is only 0 through 255, any other number will be randomly cast to an eight bit unsigned value. ", <$format, ["p", [], [], 'do_p]>, "Buffers are intended for handling character values outside of the normal printable range used by ColdC strings. A buffer is constructed by prefixing a list of integers with an accent mark (", <$format, ["tt", [], ["`"], 'do_tt]>, "), where each integer is the decimal value of the respective character. Buffers are logically true if not empty. The following buffer and string are equivalent: ", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["`[98, 117, 102, 102, 101, 114]", <$format, ["br", [], [], 'do_br]>, "\"buffer\""], 'do_dfn]>], #[['this, $help_coldc_types_buffers]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["buffer"], 'do_i]>, " is an array of integers which are interpreted to unsigned eight-bit values. Keep this in mind, as the range of an integer in a buffer is only 0 through 255, any other number will be cast to an eight bit unsigned value. ", <$format, ["np", [], [], 'do_np]>, "Buffers are intended for handling character values outside of the normal printable range used by ColdC strings. A buffer is constructed by prefixing a list of integers with an accent mark (", <$format, ["tt", [], ["`"], 'do_tt]>, "), where each integer is the decimal value of the respective character. Buffers are logically true if not empty. The following buffer and string are equivalent:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["`[98, 117, 102, 102, 101, 114]", <$format, ["br", [], [], 'do_br]>, "\"buffer\""], 'do_dfn]>], #[]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldc_types_floats.cdc ColdCore-3.0a10/src/help_coldc_types_floats.cdc
--- ColdCore-3.0a9.02/src/help_coldc_types_floats.cdc	Sat Mar 14 15:40:36 1998
+++ ColdCore-3.0a10/src/help_coldc_types_floats.cdc	Sat Mar 14 15:49:12 1998
@@ -2,7 +2,7 @@
 new object $help_coldc_types_floats: $help_coldc_types;
 
 var $has_name name = ['prop, "Float", "Float"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["float"], 'do_i]>, " is a real number (in mathematical terms). A float is logically true if it is not zero. Floats are denoted in ColdC with two numbers seperated by a period and optionally preceded with a plus (", <$format, ["tt", [], ["+"], 'do_tt]>, ") or minus (", <$format, ["tt", [], ["-"], 'do_tt]>, ") sign. If the float has small enough precision it may be formatted in scientific notation. Both forms are acceptable. For instance, the two floats are equivalent:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["0.000000001", <$format, ["br", [], [], 'do_br]>, "1e-09"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_funcs_num"]], ["Numeric Functions"], 'do_link]>], #[['links, #[["Numeric Functions", "$help_funcs_num"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["float"], 'do_i]>, " is a real number (in mathematical terms). A float is logically true if it is not zero. Floats are denoted in ColdC with two numbers seperated by a period and optionally preceded with a plus (", <$format, ["tt", [], ["+"], 'do_tt]>, ") or minus (", <$format, ["tt", [], ["-"], 'do_tt]>, ") sign. Floats may be printed in scientific notation--both forms are acceptable. The interpreter will print floats in whichever format will give the greatest precision with the least amount of space. ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_funcs_num"]], ["Numeric Functions"], 'do_link]>], #[['links, #[["Numeric Functions", "$help_funcs_num"]]]]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[["Numeric Functions", $help_funcs_num]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldc_types_strings.cdc ColdCore-3.0a10/src/help_coldc_types_strings.cdc
--- ColdCore-3.0a9.02/src/help_coldc_types_strings.cdc	Sat Mar 14 15:40:36 1998
+++ ColdCore-3.0a10/src/help_coldc_types_strings.cdc	Sat Mar 14 15:49:12 1998
@@ -2,7 +2,7 @@
 new object $help_coldc_types_strings: $help_coldc_types;
 
 var $has_name name = ['prop, "String", "String"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["string"], 'do_i]>, " is a sequence of printable characters. A string is logically true if it is not empty. A string is denoted in ColdC by enclosing the printable characters within double quote characters (", <$format, ["tt", [], ["\""], 'do_tt]>, "). To include a double quote inside a string precede it with a backslash. Any other occurance of a backslash in a string has no special meaning. The following are some examples of strings: ", <$format, ["dfn", [], [<$format, ["quote", [], ["\n\"foo\"\n\"\\\"foo\\\" is a metasyntactic variable.\"\n\"The backslash (`\') is a much-abused character in many languages.\""], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See Also: ", <$format, ["link", [["node", "$help_funcs_str"]], ["String Functions"], 'do_link]>], #[['links, #[["String Functions", "$help_funcs_str"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "A ", <$format, ["i", [], ["string"], 'do_i]>, " is a sequence of printable characters. A string is logically true if it is not empty. A string is denoted in ColdC by enclosing the printable characters within double quote characters (", <$format, ["tt", [], ["\""], 'do_tt]>, "). To include a double quote inside a string precede it with a backslash. Any other occurance of a backslash in a string has no special meaning, unless it follows another backslash (at which point it is assumed to be escaping itself, and reduces as appropriate). The following are some examples of strings: ", <$format, ["dfn", [], [<$format, ["quote", [], ["\n\"foo\"\n\"\\\"foo\\\" is a metasyntactic variable.\"\n\"The backslash (`\') is a much-abused character in many languages.\""], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See Also: ", <$format, ["link", [["node", "$help_funcs_str"]], ["String Functions"], 'do_link]>], #[['links, #[["String Functions", "$help_funcs_str"]]]]]>;
 var $help_node index = $help_index_driver;
 var $help_node links = #[["String Functions", $help_funcs_str]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_coldcore.cdc ColdCore-3.0a10/src/help_coldcore.cdc
--- ColdCore-3.0a9.02/src/help_coldcore.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_coldcore.cdc	Sat Mar 14 15:49:10 1998
@@ -2,10 +2,10 @@
 new object $help_coldcore: $help_node;
 
 var $has_name name = ['prop, "Cold Help System", "Cold Help System"];
-var $help_node body = <$ctext_frob, [[<$format, ["img", [["plain", <$format, ["quote", [], ["\n        ___     _    _   _  _     _        ___         _\n       / __|___| |__| | | || |___| |_ __  / __|_  _ __| |_ ___ _ __\n      | (__/ _ \ / _` | | __ / -_) | '_ \ \__ \ || (_-<  _/ -_) '  \ \n       \___\___/_\__,_| |_||_\___|_| .__/ |___/\_, /__/\__\___|_|_|_|\n                                   |_|         |__/\n"], 'do_quote]>], ["src", "http://www.cold.org/images/coldcore/cold-help.jpg"]], [], 'do_img]>, <$format, ["p", [], [], 'do_p]>, "Welcome to ", <$generator, ["servname", [], [], 'gen_servname]>, ". This is a hypertext help system. If you are on an interactive login you can type ", <$format, ["tt", [], ["@help help"], 'do_tt]>, " for help on how to use this help system. Following is a list of Launch Points to the help system:", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_help"]], ["Help"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["How to use this help system"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_general"]], ["General"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["General Information"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_building"]], ["Building"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Extending your Environment"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_prog"]], ["Programming"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Topics about programming"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_admin"]], ["Administration"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["ColdCore Administration"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_reference"]], ["Reference"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Core Reference Information"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_updates"]], ["Updates"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["ChangeLog for this system"], 'do_dd]>], 'do_dl]>], #[['links, #[["Help", "$help_help"], ["General", "$help_general"], ["Building", "$help_building"], ["Programming", "$help_prog"], ["Administration", "$help_admin"], ["Reference", "$help_reference"], ["Updates", "$help_updates"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["img", [["plain", <$format, ["quote", [], ["\n        ___     _    _   _  _     _        ___         _\n       / __|___| |__| | | || |___| |_ __  / __|_  _ __| |_ ___ _ __\n      | (__/ _ \ / _` | | __ / -_) | '_ \ \__ \ || (_-<  _/ -_) '  \ \n       \___\___/_\__,_| |_||_\___|_| .__/ |___/\_, /__/\__\___|_|_|_|\n                                   |_|         |__/\n"], 'do_quote]>], ["src", "http://www.cold.org/images/coldcore/cold-help.jpg"]], [], 'do_img]>, <$format, ["p", [], [], 'do_p]>, "Welcome to ", <$generator, ["servname", [], [], 'gen_servname]>, ". This is a hypertext help system. If you are on an interactive login you can type ", <$format, ["tt", [], ["@help help"], 'do_tt]>, " for help on how to use this help system. Following is a list of Launch Points to the help system:", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_help"]], ["Help"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["How to use this help system"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_general"]], ["General"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["General Information"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_building"]], ["Building"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Extending your Environment"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_prog"]], ["Programming"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Topics about programming"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_admin"]], ["Administration"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["ColdCore Administration"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_reference"]], ["Reference"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Core Reference Information"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_updates"]], ["Updates"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["ChangeLog for this system"], 'do_dd]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_administrators"]], ["Administrators"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["List of Administrators and Roles"], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], [<$format, ["link", [["node", "$help_credit"]], ["Credit"], 'do_link]>], 'do_b]>], 'do_dt]>, <$format, ["dd", [], ["Credit and Copyright Information"], 'do_dd]>], 'do_dl]>], #[['links, #[["Help", "$help_help"], ["General", "$help_general"], ["Building", "$help_building"], ["Programming", "$help_prog"], ["Administration", "$help_admin"], ["Reference", "$help_reference"], ["Updates", "$help_updates"], ["Administrators", "$help_administrators"], ["Credit", "$help_credit"]]]]]>;
 var $help_node group = 1;
 var $help_node index = $help_index_core;
-var $help_node links = #[["Help", $help_help], ["General", $help_general], ["Building", $help_building], ["Programming", $help_prog], ["Administration", $help_admin], ["Reference", $help_reference], ["Updates", $help_updates]];
+var $help_node links = #[["Help", $help_help], ["General", $help_general], ["Building", $help_building], ["Programming", $help_prog], ["Administration", $help_admin], ["Reference", $help_reference], ["Updates", $help_updates], ["Administrators", $help_administrators], ["Credit", $help_credit]];
 var $help_node nolist = 0;
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_commands.cdc ColdCore-3.0a10/src/help_commands.cdc
--- ColdCore-3.0a9.02/src/help_commands.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_commands.cdc	Sat Mar 14 15:49:11 1998
@@ -7,7 +7,6 @@
 var $help_node links = #[["VR vs Non-VR", $help_commands_vr], ["Types", $help_commands_types], ["Matching", $help_commands_matching], ["Enhanced", $help_commands_enhanced], ["All Commands", $help_index_cmds], ["Programming", $help_prog_commands]];
 var $help_node nolist = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$help_commands];
diff -rwu ColdCore-3.0a9.02/src/help_commands_types.cdc ColdCore-3.0a10/src/help_commands_types.cdc
--- ColdCore-3.0a9.02/src/help_commands_types.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_commands_types.cdc	Sat Mar 14 15:49:11 1998
@@ -2,7 +2,7 @@
 new object $help_commands_types: $help_commands;
 
 var $has_name name = ['prop, "Types", "Types"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Each command is associated with a specific method. When a command match is found, that method is executed with arguments depending upon what you typed. The Cold Dark recognizes three types of commands:", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [], [<$format, ["dt", [], [<$format, ["b", [], ["Local Commands"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Local commands are any non-directed command, or any command which does not require a target in the command line. Matching for local commands uses ColdC template matching.", <$format, ["p", [], [], 'do_p]>], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], ["Remote Commands"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Remote commands differ from Local Commands in that they require the target of the command, in the command string. For instance, \"get button\" would be a remote command, because it requires the target of button to function correctly. Matching for Remote Commands uses ColdC template matching", <$format, ["p", [], [], 'do_p]>], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], ["Shortcuts"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Shortcuts are intented as wrap-arounds for commands, using ColdC pattern matching instead of template matching."], 'do_dd]>], 'do_dl]>], #[['this, $help_commands_types]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Each command is associated with a specific method. When a command match is found, that method is executed with arguments depending upon what you typed. The Cold Dark recognizes three types of commands:", <$format, ["p", [], [], 'do_p]>, <$format, ["dl", [], [<$format, ["dt", [], [<$format, ["b", [], ["Local Commands"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Local commands are any non-directed command, or any command which does not require a target in the command template. Matching for local commands uses ColdC template matching. The parser looks for local commands on the user, the user's ancestry, and the user's location (but not anything the user is carrying or in the user's location).", <$format, ["p", [], [], 'do_p]>], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], ["Remote Commands"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Remote commands differ from Local Commands in that they require the target of the command, in the command string. For instance, \"get button\" would be a remote command, because it requires the target of button to function correctly. Matching for Remote Commands uses ColdC template matching", <$format, ["p", [], [], 'do_p]>], 'do_dd]>, <$format, ["dt", [], [<$format, ["b", [], ["Shortcuts"], 'do_b]>], 'do_dt]>, <$format, ["dd", [], [<$format, ["p", [], [], 'do_p]>, "Shortcuts are intented as wrap-arounds for commands, using ColdC pattern matching instead of template matching."], 'do_dd]>], 'do_dl]>], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
 var $root created_on = 810075676;
diff -rwu ColdCore-3.0a9.02/src/help_environment.cdc ColdCore-3.0a10/src/help_environment.cdc
--- ColdCore-3.0a9.02/src/help_environment.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_environment.cdc	Sat Mar 14 15:49:10 1998
@@ -2,7 +2,7 @@
 new object $help_environment: $help_general;
 
 var $has_name name = ['prop, "Environment", "Environment"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Your environment is where the system tries to find things, when you name something. It does this by first checking everything in your contents, and everything in the location you are in. ", <$format, ["subj", [["level", "2"]], ["Context"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "The system will also check your recent context. The server records the last object you named, as well as all of the last objects you named (with a gender). You can list your recent context with the command @context, receiving a result similar to:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["Last thing: the Magazine Rack\nLast it:    the Magazine Rack      \nLast her:   Squeak the lemming\nLast him:   Miro"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When the system is attempting to find a named object, it first checks in your context. This allows you to name objects by their gender (if you remember it correctly). For instance:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["> get bottle\nYou take the bottle.\n> drop it\nYou drop the bottle."], 'do_quote]>], 'do_dfn]>, " ", <$format, ["subj", [["level", "2"]], ["Last Object"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "If you do not name an object, it will return the last object you named:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["> get bottle\nYou take the bottle.\n> drop\nYou drop the bottle."], 'do_quote]>], 'do_dfn]>, " ", <$format, ["subj", [["level", "2"]], ["Multiple Matches"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "In the case where multiple objects would match a single name, you can use ordinal references, such as ", <$format, ["tt", [], ["the 3rd bottle"], 'do_tt]>, " or ", <$format, ["tt", [], ["the second key"], 'do_tt]>, ". ", <$format, ["subj", [["level", "2"]], ["Keywords"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "There are also two words known by the system. The first is ", <$format, ["tt", [], ["me"], 'do_tt]>, ", which is always you. The second is ", <$format, ["tt", [], ["here"], 'do_tt]>, ", which is always your location. ", <$format, ["subj", [["level", "2"]], ["Remembering"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "If you are having a hard time remembering an items object name, or typing it's full name, you can remember it as a shorter name, with the command ", <$format, ["link", [["node", "$help_cmd_remember"]], ["@remember"], 'do_link]>, "."], #[['links, #[["@remember", "$help_cmd_remember"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Your environment is where the system tries to find things, when you name something. It does this by first checking everything in your contents, and everything in the location you are in. ", <$format, ["subj", [["level", "2"]], ["Context"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "The system will also check your recent context. The server records the last object you named, as well as all of the last objects you named (with a gender). You can list your recent context with the command @context, receiving a result similar to:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["Last thing: the Magazine Rack\nLast it:    the Magazine Rack      \nLast her:   Squeak the lemming\nLast him:   Miro"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When the system is attempting to find a named object, it first checks in your context. This allows you to name objects by their gender (if you remember it correctly). For instance:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [["nobound", 1]], [<$format, ["quote", [], ["> get bottle\nYou take the bottle.\n> drop it\nYou drop the bottle."], 'do_quote]>], 'do_dfn]>, " ", <$format, ["subj", [["level", "2"]], ["Multiple Matches"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "In the case where multiple objects would match a single name, you can use ordinal references, such as ", <$format, ["tt", [], ["the 3rd bottle"], 'do_tt]>, " or ", <$format, ["tt", [], ["the second key"], 'do_tt]>, ". ", <$format, ["subj", [["level", "2"]], ["Posessive Matching"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "If something is located in something else, in your environment (either being carried by somebody, or in a box, etc), you can refer to it posessively. For instance, if the user 'Joe' is holding a note, you can look at it with the command:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [["nobound", 1]], ["> look at Joe's note"], 'do_dfn]>, " ", <$format, ["subj", [["level", "2"]], ["Keywords"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "There are also two words known by the system. The first is ", <$format, ["tt", [], ["me"], 'do_tt]>, ", which is always you. The second is ", <$format, ["tt", [], ["here"], 'do_tt]>, ", which is always your location. ", <$format, ["subj", [["level", "2"]], ["Remembering"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "If you are having a hard time remembering an items object name, or typing it's full name, you can remember it as a shorter name, with the command ", <$format, ["link", [["node", "$help_cmd_remember"]], ["@remember"], 'do_link]>, "."], #[['links, #[["@remember", "$help_cmd_remember"]]]]]>;
 var $help_node index = $help_index_core;
 var $help_node links = #[["@remember", $help_cmd_remember]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_func_ctime.cdc ColdCore-3.0a10/src/help_func_ctime.cdc
--- ColdCore-3.0a9.02/src/help_func_ctime.cdc	Sat Mar 14 15:40:41 1998
+++ ColdCore-3.0a10/src/help_func_ctime.cdc	Sat Mar 14 15:49:17 1998
@@ -2,7 +2,7 @@
 new object $help_func_ctime: $help_funcs_misc;
 
 var $has_name name = ['prop, "ctime()", "ctime()"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["STRING ctime([INTEGER time])"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function converts the integer ", <$format, ["i", [], ["time"], 'do_i]>, " into a string format. If ", <$format, ["i", [], ["time"], 'do_i]>, " is not specified, then ", <$format, ["tt", [], ["ctime()"], 'do_tt]>, " uses the current time. Example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["ctime(739180536)", <$format, ["br", [], [], 'do_br]>, "=> \"Fri Jun 4 03:55:36 1993\""], 'do_dfn]>], #[['this, $help_func_ctime]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["STRING ctime([INTEGER time])"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function converts the integer ", <$format, ["i", [], ["time"], 'do_i]>, " into a string format, using the operating system's ", <$format, ["i", [], ["ctime"], 'do_i]>, " library call. This call may handle any time conversions automatically (such as Daylight Savings and Leap Years). If ", <$format, ["i", [], ["time"], 'do_i]>, " is not specified, then ", <$format, ["tt", [], ["ctime()"], 'do_tt]>, " uses the current time. Example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["ctime(739180536)", <$format, ["br", [], [], 'do_br]>, "=> \"Fri Jun 4 03:55:36 1993\""], 'do_dfn]>], #[]]>;
 var $help_node index = $help_index_function;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_func_fread.cdc ColdCore-3.0a10/src/help_func_fread.cdc
--- ColdCore-3.0a9.02/src/help_func_fread.cdc	Sat Mar 14 15:40:40 1998
+++ ColdCore-3.0a10/src/help_func_fread.cdc	Sat Mar 14 15:49:16 1998
@@ -2,7 +2,7 @@
 new object $help_func_fread: $help_funcs_file;
 
 var $has_name name = ['prop, "fread()", "fread()"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["STRING|BUFFER"], 'do_i]>, " fread([", <$format, ["i", [], ["INTEGER block"], 'do_i]>, "])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Read from the existing file bound to this object. If the file is a binary file, a buffer is returned. If the file is a text file (default), a string is returned. If the file is at the end, the ", <$format, ["tt", [], ["~eof"], 'do_tt]>, " error is thrown. With binary files an optional block size may be specified. The default block size is 512 characters. Example: ", <$format, ["dfn", [], [<$format, ["quote", [], ["\ncatch ~eof {\n    while (line = fread())  \n        .tell(line);\n}"], 'do_quote]>], 'do_dfn]>], #[['this, $help_func_fread]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["STRING|BUFFER"], 'do_i]>, " fread([", <$format, ["i", [], ["INTEGER block"], 'do_i]>, "])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Read from the existing file bound to this object. If the file is a binary file, a buffer is returned. If the file is a text file (default), a string is returned. If the file is at the end, the ", <$format, ["tt", [], ["~eof"], 'do_tt]>, " error is thrown. With binary files an optional block size may be specified. The default block size is 512 characters. Example: ", <$format, ["dfn", [], [<$format, ["quote", [], ["\nwhile ((| line = fread() |) != ~eof)\n    .tell(line);"], 'do_quote]>], 'do_dfn]>], #[]]>;
 var $help_node index = $help_index_function;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_func_localtime.cdc ColdCore-3.0a10/src/help_func_localtime.cdc
--- ColdCore-3.0a9.02/src/help_func_localtime.cdc	Sat Mar 14 15:40:41 1998
+++ ColdCore-3.0a10/src/help_func_localtime.cdc	Sat Mar 14 15:49:17 1998
@@ -2,7 +2,7 @@
 new object $help_func_localtime: $help_funcs_misc;
 
 var $has_name name = ['prop, "localtime()", "localtime()"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["LIST"], 'do_i]>, " localtime([", <$format, ["i", [], ["INTEGER time"], 'do_i]>, "])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function returns an 11 element list representing the specified by the argument ", <$format, ["i", [], ["time"], 'do_i]>, ". If no argument is given, it will use the current time instead. The elements are taken from ", <$format, ["tt", [], ["struct tm"], 'do_tt]>, " in C and altered as needed to begin at one instead of zero. Elements are broken down in the list as follows:", <$format, ["p", [], [], 'do_p]>, <$format, ["ol", [], [<$format, ["li", [], ["INTEGER time (same as returned by the function ", <$format, ["tt", [], ["time()"], 'do_tt]>, ")"], 'do_li]>, <$format, ["li", [], ["INTEGER seconds (1-60)"], 'do_li]>, <$format, ["li", [], ["INTEGER minutes (1-60)"], 'do_li]>, <$format, ["li", [], ["INTEGER hours (1-24))"], 'do_li]>, <$format, ["li", [], ["INTEGER day of month (1-31)"], 'do_li]>, <$format, ["li", [], ["INTEGER month in year (1-12)"], 'do_li]>, <$format, ["li", [], ["INTEGER year (use year + 1900 for the full year)"], 'do_li]>, <$format, ["li", [], ["INTEGER week day (1-7, Sunday=1)"], 'do_li]>, <$format, ["li", [], ["INTEGER year day (1-366)"], 'do_li]>, <$format, ["li", [], ["INTEGER is daylight savings in effect?"], 'do_li]>, <$format, ["li", [], ["STRING time zone name"], 'do_li]>], 'do_ol]>], #[['this, $help_func_localtime]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["LIST"], 'do_i]>, " localtime([", <$format, ["i", [], ["INTEGER time"], 'do_i]>, "])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function returns an 11 element list representing the specified by the argument ", <$format, ["i", [], ["time"], 'do_i]>, ". If no argument is given, it will use the current time instead. The elements are taken from ", <$format, ["tt", [], ["struct tm"], 'do_tt]>, " in C and altered as needed to begin at one instead of zero. Elements are broken down in the list as follows:", <$format, ["p", [], [], 'do_p]>, <$format, ["ol", [], [<$format, ["li", [], ["INTEGER time (same as returned by the function ", <$format, ["tt", [], ["time()"], 'do_tt]>, ")"], 'do_li]>, <$format, ["li", [], ["INTEGER seconds (1-60)"], 'do_li]>, <$format, ["li", [], ["INTEGER minutes (1-60)"], 'do_li]>, <$format, ["li", [], ["INTEGER hours (1-24))"], 'do_li]>, <$format, ["li", [], ["INTEGER day of month (1-31)"], 'do_li]>, <$format, ["li", [], ["INTEGER month in year (1-12)"], 'do_li]>, <$format, ["li", [], ["INTEGER year (use year + 1900 for the full year)"], 'do_li]>, <$format, ["li", [], ["INTEGER week day (1-7, Sunday=1)"], 'do_li]>, <$format, ["li", [], ["INTEGER year day (1-366)"], 'do_li]>, <$format, ["li", [], ["INTEGER is daylight savings in effect?"], 'do_li]>, <$format, ["li", [], ["STRING time zone name"], 'do_li]>, <$format, ["li", [], ["INTEGER timezone offset in seconds from GMT"], 'do_li]>], 'do_ol]>, <$format, ["np", [], [], 'do_np]>, "Note: there is one bug, in order to optimize the speed of this function the timezone name (as a string) is cached. This will mean that if the timezone name changes while genesis is running the name will not update correctly."], #[]]>;
 var $help_node index = $help_index_function;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_func_strsed.cdc ColdCore-3.0a10/src/help_func_strsed.cdc
--- ColdCore-3.0a9.02/src/help_func_strsed.cdc	Sat Mar 14 15:40:42 1998
+++ ColdCore-3.0a10/src/help_func_strsed.cdc	Sat Mar 14 15:49:18 1998
@@ -2,7 +2,7 @@
 new object $help_func_strsed: $help_funcs_str;
 
 var $has_name name = ['prop, "strsed()", "strsed()"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["STR"], 'do_i]>, " strsed(", <$format, ["i", [], ["STR rx"], 'do_i]>, ", ", <$format, ["i", [], ["STR str"], 'do_i]>, ", ", <$format, ["i", [], ["STR replace"], 'do_i]>, "[, ", <$format, ["i", [], ["STR flags"], 'do_i]>, "[, ", <$format, ["i", [], ["INT count"], 'do_i]>, "]])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This functions similar ", <$format, ["tt", [], ["sed"], 'do_tt]>, " in many unix systems. It searches for any occurances of ", <$format, ["i", [], ["regexp"], 'do_i]>, " in ", <$format, ["i", [], ["string"], 'do_i]>, " and replaces them with ", <$format, ["i", [], ["replace"], 'do_i]>, ", returning the result. The optional fourth argument is used to specify flags for sed. Flags are any of the following characters within a string: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "5%,95%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["g"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Match the regular expression globally througout the string"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["s"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Single match--Match the first occurance only (default)"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["c"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Case matters when matching"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["i"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Case doesn't matter when matching (default)"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "For more information, see the section on ", <$format, ["link", [["node", "$help_coldc_regexp"]], ["Regular Expressions"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, "The fifth argument ", <$format, ["i", [], ["count"], 'do_i]>, " is intended to optimize the use of this function, and is generally not used. It is simply an optimizing guideline which specifies how many expected occurances of the regular expression are expected in the string. This value is used when computing the initial size of the resulting string, to lower the amount of memory allocations which may have to be performed. ", <$format, ["np", [], [], 'do_np]>, "Examples:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["strsed(\"foObar\", \"o+\", \"X\")", <$format, ["br", [], [], 'do_br]>, "=> \"fXbar\" ", <$format, ["np", [], [], 'do_np]>, "strsed(\"foObar\", \"o+\", \"X\", \"o\")", <$format, ["br", [], [], 'do_br]>, "=> \"fXObar\""], 'do_dfn]>], #[['this, $help_func_strsed]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["STR"], 'do_i]>, " strsed(", <$format, ["i", [], ["STR rx"], 'do_i]>, ", ", <$format, ["i", [], ["STR str"], 'do_i]>, ", ", <$format, ["i", [], ["STR replace"], 'do_i]>, "[, ", <$format, ["i", [], ["STR flags"], 'do_i]>, "[, ", <$format, ["i", [], ["INT count"], 'do_i]>, "]])"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This functions similar ", <$format, ["tt", [], ["sed"], 'do_tt]>, " in many unix systems. It searches for any occurances of ", <$format, ["i", [], ["regexp"], 'do_i]>, " in ", <$format, ["i", [], ["string"], 'do_i]>, " and replaces them with ", <$format, ["i", [], ["replace"], 'do_i]>, ", returning the result. The optional fourth argument is used to specify flags for sed. Flags are any of the following characters within a string: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "5%,95%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["g"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Match the regular expression globally througout the string"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["s"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Single match--Match the first occurance only (default)"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["c"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Case matters when matching"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["b", [], ["i"], 'do_b]>], 'do_td]>, <$format, ["td", [], ["Case doesn't matter when matching (default)"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "For more information, see the section on ", <$format, ["link", [["node", "$help_coldc_regexp"]], ["Regular Expressions"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, "The fifth argument ", <$format, ["i", [], ["count"], 'do_i]>, " is intended to optimize the use of this function, and is generally not used. It is simply an optimizing guideline which specifies how many expected occurances of the regular expression are expected in the string. This value is used when computing the initial size of the resulting string, to lower the amount of memory allocations which may have to be performed. ", <$format, ["np", [], [], 'do_np]>, "Examples:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["strsed(\"foObar\", \"o+\", \"X\")", <$format, ["br", [], [], 'do_br]>, "=> \"fXbar\" ", <$format, ["np", [], [], 'do_np]>, "strsed(\"foObar\", \"o+\", \"X\", \"c\")", <$format, ["br", [], [], 'do_br]>, "=> \"fXObar\""], 'do_dfn]>], #[['links, #[["Regular Expressions", "$help_coldc_regexp"]]]]]>;
 var $help_node index = $help_index_function;
 var $help_node links = #[["Regular Expressions", $help_coldc_regexp]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_func_time.cdc ColdCore-3.0a10/src/help_func_time.cdc
--- ColdCore-3.0a9.02/src/help_func_time.cdc	Sat Mar 14 15:40:41 1998
+++ ColdCore-3.0a10/src/help_func_time.cdc	Sat Mar 14 15:49:17 1998
@@ -2,7 +2,7 @@
 new object $help_func_time: $help_funcs_misc;
 
 var $has_name name = ['prop, "time()", "time()"];
-var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["INTEGER"], 'do_i]>, " time()"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function returns the system time in seconds since midnight GMT, January 1, 1970. The functions ", <$format, ["tt", [], ["ctime()"], 'do_tt]>, ", ", <$format, ["tt", [], ["localtime()"], 'do_tt]>, " and the native method ", <$format, ["tt", [], ["$time.format()"], 'do_tt]>, " can be used in manipulating this number."], #[['this, $help_func_time]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["INTEGER"], 'do_i]>, " time()"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This function returns the system time in seconds since midnight GMT, January 1, 1970--likely adjusted for the local timezone (this is OS dependant). The functions ", <$format, ["tt", [], ["ctime()"], 'do_tt]>, ", ", <$format, ["tt", [], ["localtime()"], 'do_tt]>, " and the native method ", <$format, ["tt", [], ["$time.format()"], 'do_tt]>, " can be used in manipulating this number."], #[]]>;
 var $help_node index = $help_index_function;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_index.cdc ColdCore-3.0a10/src/help_index.cdc
--- ColdCore-3.0a9.02/src/help_index.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_index.cdc	Sat Mar 14 15:49:10 1998
@@ -55,6 +55,7 @@
 
 root method .core_help_index(): nooverride  {
     .set_body("");
+    .clean_database();
     dirty++;
 };
 
diff -rwu ColdCore-3.0a9.02/src/help_index_cmds.cdc ColdCore-3.0a10/src/help_index_cmds.cdc
--- ColdCore-3.0a9.02/src/help_index_cmds.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_index_cmds.cdc	Sat Mar 14 15:49:10 1998
@@ -1,9 +1,9 @@
 
 new object $help_index_cmds: $help_index;
 
*var $db database = ' ' help_index_cmds.cdc
 var $has_name name = ['prop, "Commands", "Commands"];
-var $help_index dirty = 36;
+var $help_index dirty = 1;
 var $help_node body = <$ctext_frob, [[], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_index_core.cdc ColdCore-3.0a10/src/help_index_core.cdc
--- ColdCore-3.0a9.02/src/help_index_core.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_index_core.cdc	Sat Mar 14 15:49:10 1998
@@ -1,9 +1,9 @@
 
 new object $help_index_core: $help_index;
 
*var $db database = ' ' help_index_core.cdc
 var $has_name name = ['prop, "Core", "Core"];
-var $help_index dirty = 1;
+var $help_index dirty = 22;
 var $help_node body = <$ctext_frob, [[], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_index_function.cdc ColdCore-3.0a10/src/help_index_function.cdc
--- ColdCore-3.0a9.02/src/help_index_function.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_index_function.cdc	Sat Mar 14 15:49:10 1998
@@ -1,9 +1,9 @@
 
 new object $help_index_function: $help_index;
 
*var $db database = ' ' help_index_function.cdc
 var $has_name name = ['prop, "Function", "Function"];
-var $help_index dirty = 1;
+var $help_index dirty = 21;
 var $help_node body = <$ctext_frob, [[], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_index_objects.cdc ColdCore-3.0a10/src/help_index_objects.cdc
--- ColdCore-3.0a9.02/src/help_index_objects.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_index_objects.cdc	Sat Mar 14 15:49:10 1998
@@ -1,9 +1,9 @@
 
 new object $help_index_objects: $help_index;
 
*var $db database = ' ' help_index_objects.cdc
 var $has_name name = ['prop, "Objects", "Objects"];
-var $help_index dirty = 1;
+var $help_index dirty = 2;
 var $help_node body = <$ctext_frob, [[], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_list_element.cdc ColdCore-3.0a10/src/help_list_element.cdc
--- ColdCore-3.0a9.02/src/help_list_element.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_list_element.cdc	Sat Mar 14 15:49:23 1998
@@ -2,7 +2,7 @@
 new object $help_list_element: $help_obj_list;
 
 var $has_name name = ['prop, "Element", "Element"];
-var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["list.length", 1]], ["length"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Length of the ", <$format, ["var", [], ["list"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.replace", 1]], ["replace"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["elt"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Replaces ", <$format, ["var", [], ["n"], 'do_var]>, "th element with ", <$format, ["var", [], ["elt"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.delete", 1]], ["delete"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Deletes ", <$format, ["var", [], ["n"], 'do_var]>, "th element from the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.insert", 1]], ["insert"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["elt"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Inserts ", <$format, ["var", [], ["elt"], 'do_var]>, " at the ", <$format, ["var", [], ["n"], 'do_var]>, "th place of the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.subrange", 1]], ["subrange"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["len"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Returns sublist starting at ", <$format, ["var", [], ["l"], 'do_var]>, ", with ", <$format, ["var", [], ["len"], 'do_var]>, " elements."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.last", 1]], ["last"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Returns last element of the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.msort", 1]], ["msort"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, "[, ", <$format, ["var", [], ["keys"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Sorts the list by the keys list. Keys default to the list itself."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.chop", 1]], ["chop"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, "[, ", <$format, ["var", [], ["count"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Removes count elements from the tail of the list. Default is 1 element."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.swap", 1]], ["swap"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["index1"], 'do_var]>, ", ", <$format, ["var", [], ["index2"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Swaps the two elements of the list."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["list.length", 1]], ["length"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Length of the ", <$format, ["var", [], ["list"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.replace", 1]], ["replace"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["elt"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Replaces ", <$format, ["var", [], ["n"], 'do_var]>, "th element with ", <$format, ["var", [], ["elt"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.delete", 1]], ["delete"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Deletes ", <$format, ["var", [], ["n"], 'do_var]>, "th element from the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.insert", 1]], ["insert"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["elt"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Inserts ", <$format, ["var", [], ["elt"], 'do_var]>, " at the ", <$format, ["var", [], ["n"], 'do_var]>, "th place of the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.subrange", 1]], ["subrange"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["n"], 'do_var]>, ", ", <$format, ["var", [], ["len"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Returns sublist starting at ", <$format, ["var", [], ["l"], 'do_var]>, ", with ", <$format, ["var", [], ["len"], 'do_var]>, " elements."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.last", 1]], ["last"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Returns last element of the list."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.sort", 1]], ["sort"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, "[, ", <$format, ["var", [], ["keys"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Sorts the list by the keys list. Keys default to the list itself."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.chop", 1]], ["chop"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, "[, ", <$format, ["var", [], ["count"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Removes count elements from the tail of the list. Default is 1 element."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["list.swap", 1]], ["swap"], 'do_method]>, "(", <$format, ["var", [], ["list"], 'do_var]>, ", ", <$format, ["var", [], ["index1"], 'do_var]>, ", ", <$format, ["var", [], ["index2"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Swaps the two elements of the list."], 'do_dd]>], 'do_dl]>], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
 var $root created_on = 850833025;
diff -rwu ColdCore-3.0a9.02/src/help_mail.cdc ColdCore-3.0a10/src/help_mail.cdc
--- ColdCore-3.0a9.02/src/help_mail.cdc	Sat Mar 14 15:40:44 1998
+++ ColdCore-3.0a10/src/help_mail.cdc	Sat Mar 14 15:49:20 1998
@@ -5,7 +5,7 @@
 var $has_name name = ['prop, "Mail System", "Mail System"];
 var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The mail system built into ColdCore is a fairly basic one which allows each user to have their own mailbox and for there to exist various mailing lists which can be publicly accessible or have those who are able to send to the list or those able to read the list limited. ", <$format, ["np", [], [], 'do_np]>, "The commands to the ColdCore mail system are defined on object $mail_ui. ", <$format, ["np", [], [], 'do_np]>, "The following commands are available:", <$format, ["table", [["cols", "50%,50%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_mail_mail"]], ["@mail"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_next_new"]], ["@nn|@next-new"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_rmmail"]], ["@remove-m?ail|@rmm?ail"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_subscribe"]], ["@sub?scribed"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_reply"]], ["@reply"], 'do_link]>, " <any>"], 'do_li]>], 'do_ul]>], 'do_td]>, <$format, ["td", [], [<$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_mail_mail_lists"]], ["@mail-list?s"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_read"]], ["@read"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_send"]], ["@send"], 'do_link]>, " <any>"], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_mail_unsubscribe"]], ["@unsub?scribed"], 'do_link]>, " <any>"], 'do_li]>], 'do_ul]>], 'do_td]>], 'do_tr]>], 'do_table]>], #[['links, #[["@mail", "$help_mail_mail"], ["@nn|@next-new", "$help_mail_next_new"], ["@remove-m?ail|@rmm?ail", "$help_mail_rmmail"], ["@sub?scribed", "$help_mail_subscribe"], ["@reply", "$help_mail_reply"], ["@mail-list?s", "$help_mail_mail_lists"], ["@read", "$help_mail_read"], ["@send", "$help_mail_send"], ["@unsub?scribed", "$help_mail_unsubscribe"]]]]]>;
 var $help_node holder = 1;
-var $help_node index = $help_index_cmds;
+var $help_node index = $help_index_subsystem;
 var $help_node links = #[["@mail", $help_mail_mail], ["@nn|@next-new", $help_mail_next_new], ["@remove-m?ail|@rmm?ail", $help_mail_rmmail], ["@sub?scribed", $help_mail_subscribe], ["@reply", $help_mail_reply], ["@mail-list?s", $help_mail_mail_lists], ["@read", $help_mail_read], ["@send", $help_mail_send], ["@unsub?scribed", $help_mail_unsubscribe]];
 var $root created_on = 863993835;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_msg_coldc.cdc ColdCore-3.0a10/src/help_msg_coldc.cdc
--- ColdCore-3.0a9.02/src/help_msg_coldc.cdc	Sat Mar 14 15:40:47 1998
+++ ColdCore-3.0a10/src/help_msg_coldc.cdc	Sat Mar 14 15:49:24 1998
@@ -2,7 +2,7 @@
 new object $help_msg_coldc: $help_sys_message;
 
 var $has_name name = ['prop, "ColdC Interface", "ColdC Interface"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The message subsystem is contained on the $foundation object. It uses two object variables: ", <$format, ["dfn", [["ind", "4"], ["nobound", 1]], [<$format, ["table", [["cols", "25%,75%"]], [<$format, ["tr", [], [<$format, ["td", [], [",msgs"], 'do_td]>, <$format, ["td", [], ["Local instances of a defined message"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [",defined_msgs"], 'do_td]>, <$format, ["td", [], ["Defined messages and attributes"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "And the following methods:", <$format, ["dl", [], [<$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".defined_msgs()"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Returns the defined_msgs variable from the current object."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".all_defined_msgs()"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Returns all messages defined by the current object and all ancestors up to $foundation."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".msgs()"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Returns any local messages instances."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".all_msgs()"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Returns all messages and instances, local or default."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".define_msg(name)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Define a new message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".undefine_msg(name)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Undefine a message (will clear any instances)."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".get_msg(name, definer)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Get all branches (local or default) of the message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".set_msg(name, branch, definer, value)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Set the value of a branch of a message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".clear_msg(name, [branches])"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Clear the local instance and branches of a message. If no branches are defined all branches are cleared."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".get_msg_attr(name, attr)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Get the specified attribute for a message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".set_msg_attr(name, attr, value)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Set the specified attribute for a message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".msg_definer(name)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Determine the definer for a message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".get_default_msg(name)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Get the default branches for a message."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [".eval_message(name, definer, vars)"], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Evaluate a message"], 'do_dd]>], 'do_dl]>], #[['this, $help_msg_coldc]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The message subsystem is contained on the $foundation object. It uses two object variables: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "25%,75%"]], [<$format, ["tr", [], [<$format, ["td", [], [",msgs"], 'do_td]>, <$format, ["td", [], ["Local instances of a defined message"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [",defined_msgs"], 'do_td]>, <$format, ["td", [], ["Defined messages and attributes"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "And the following methods:", <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["foundation.defined_msgs", 1]], ["defined_msgs"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the defined_msgs variable from the current object."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.all_defined_msgs", 1]], ["all_defined_msgs"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns all messages defined by the current object and all ancestors up to $foundation."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.msgs", 1]], ["msgs"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns any local messages instances."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.all_msgs", 1]], ["all_msgs"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns all messages and instances, local or default."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.define_msg", 1]], ["define_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Define a new message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.undefine_msg", 1]], ["undefine_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Undefine a message (will clear any instances)."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.get_msg", 1]], ["get_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", ", <$format, ["var", [], ["definer"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Get all branches (local or default) of the message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.set_msg", 1]], ["set_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", ", <$format, ["var", [], ["branch"], 'do_var]>, ", ", <$format, ["var", [], ["definer"], 'do_var]>, ", ", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Set the value of a branch of a message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.clear_msg", 1]], ["clear_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", [", <$format, ["var", [], ["branches"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Clear the local instance and branches of a message. If no branches are defined all branches are cleared."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.get_msg_attr", 1]], ["get_msg_attr"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", ", <$format, ["var", [], ["attr"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Get the specified attribute for a message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.set_msg_attr", 1]], ["set_msg_attr"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", ", <$format, ["var", [], ["attr"], 'do_var]>, ", ", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Set the specified attribute for a message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.msg_definer", 1]], ["msg_definer"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Determine the definer for a message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.get_default_msg", 1]], ["get_default_msg"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Get the default branches for a message."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["foundation.eval_message", 1]], ["eval_message"], 'do_method]>, "(", <$format, ["var", [], ["name"], 'do_var]>, ", ", <$format, ["var", [], ["definer"], 'do_var]>, ", ", <$format, ["var", [], ["vars"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Evaluate a message"], 'do_dd]>], 'do_dl]>], #[]]>;
 var $help_node links = #[];
 var $root created_on = 856117601;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_node.cdc ColdCore-3.0a10/src/help_node.cdc
--- ColdCore-3.0a9.02/src/help_node.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/help_node.cdc	Sat Mar 14 15:49:10 1998
@@ -11,7 +11,6 @@
 var $help_node nolist = 1;
 var $root created_on = 796268969;
 var $root defined_settings = #[["nolist", #[['get, ['nolist]], ['set, ['set_nolist]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["group", #[['get, ['group]], ['set, ['set_group]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["index", #[['get, ['get_index_setting]], ['set, ['set_index_setting]], ['parse, ['parse_index_setting]], ['format, ['format_index]]]], ["holder", #[['get, ['get_holder_setting]], ['set, ['set_holder_setting]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'variables, 'core];
 var $root help_node = $help_obj_help_node;
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_node_editor_commands.cdc ColdCore-3.0a10/src/help_node_editor_commands.cdc
--- ColdCore-3.0a9.02/src/help_node_editor_commands.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_node_editor_commands.cdc	Sat Mar 14 15:49:24 1998
@@ -2,7 +2,7 @@
 new object $help_node_editor_commands: $help_sys_editor;
 
 var $has_name name = ['prop, "Commands", "Commands"];
-var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["a?fter [<text>] OR _<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> after current line. You may also use an underscore (_) as a shortcut character. If text does not exist you will be prompted for the input."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["ap?pend <text> OR ,<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> after current line. You may also use a comma (,) as a shortcut character."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["copy [<range>] [to] <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Copy <range> of text or current line to <line>."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["d?elete [<range>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Delete <range> or current line."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["done|quit"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Close editor without saving changes."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["fill <range> <line width>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Fill <range> of lines to fit within <line width> appropriately (either by expanding or joining)."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["help [<command>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Basic editor help."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["i?nsert [<text>] OR '<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> before current line. You may also use a single-quote (') as a shortcut character. If text does not exist you will be prompted for the input."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["list [<range>] [-n?umbers]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["List <range> or all of edit buffer. The option -n?umbers may be used to not specify line numbers."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["line <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Change the current line to <line>. You can also use a period (.) as a shortcut character."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["move [<range>] [to] <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Move <range> or current line to <line>."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["save|comp?ile [as] [<ref>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Save document, if arguments are given will save alternate copy."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["s?ub|sed <old> <new> [<range>] [<options>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Search for <old> and replace it with <new> in <range> (defaulting to the current line). The character following the command is used as a seperator (a space in the example). This allows for the sed-like syntax: s/old/new/. The command 'sed' will use strsed() with regular expressions, the command 'sub' or 's' will use strsub() with literal matching. Options are any one of:", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "g Globally match and replace (do it multiple times)", <$format, ["p", [], [], 'do_p]>, "s Single match and replace (do it only on the first occurance)", <$format, ["p", [], [], 'do_p]>, "c Case matters when matching.", <$format, ["p", [], [], 'do_p]>, "i Case doesn't matter when matching.", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "Option defaults for sed are: si", <$format, ["p", [], [], 'do_p]>, "Option defaults for sub are: gi"], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["send|mail <mail-recipient>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Used to send current contents of editor to a mail recipient."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["store"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Store editor--do not save changes. Editor can be resumed with @reedit."], 'do_dd]>], 'do_dl]>], #[['this, $help_node_editor_commands]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["a?fter [<text>] OR _<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> after current line. You may also use an underscore (_) as a shortcut character. If text does not exist you will be prompted for the input."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["ap?pend <text> OR ,<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> after current line. You may also use a comma (,) as a shortcut character."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["copy [<range>] [to] <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Copy <range> of text or current line to <line>."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["d?elete [<range>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Delete <range> or current line."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["done|quit"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Close editor without saving changes."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["fill <range> <line width>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Fill <range> of lines to fit within <line width> appropriately (either by expanding or joining)."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["help [<command>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Basic editor help."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["i?nsert [<text>] OR '<text>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Add <text> before current line. You may also use a single-quote (') as a shortcut character. If text does not exist you will be prompted for the input."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["list [<range>] [-n?umbers]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["List <range> or all of edit buffer. The option -n?umbers may be used to not specify line numbers."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["line <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Change the current line to <line>. You can also use a period (.) as a shortcut character."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["move [<range>] [to] <line>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Move <range> or current line to <line>."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["save|comp?ile [as] [<ref>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Save document, if arguments are given will save alternate copy."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["s?ub|sed <old> <new> [<range>] [<options>]"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Search for <old> and replace it with <new> in <range> (defaulting to the current line). The character following the command is used as a seperator (a space in the example). This allows for the sed-like syntax: s/old/new/. The command 'sed' will use strsed() with regular expressions, the command 'sub' or 's' will use strsub() with literal matching. Options are any one of:", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "g Globally match and replace (do it multiple times)", <$format, ["p", [], [], 'do_p]>, "s Single match and replace (do it only on the first occurance)", <$format, ["p", [], [], 'do_p]>, "c Case matters when matching.", <$format, ["p", [], [], 'do_p]>, "i Case doesn't matter when matching.", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "Option defaults for sed are: si", <$format, ["p", [], [], 'do_p]>, "Option defaults for sub are: gi"], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["send|mail <mail-recipient>"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Used to send current contents of editor to a mail recipient."], 'do_dd]>, <$format, ["dt", [], [<$format, ["subj", [["level", "3"]], [<$format, ["tt", [], ["store"], 'do_tt]>], 'do_subj]>], 'do_dt]>, <$format, ["dd", [], ["Store editor--do not save changes. Editor can be resumed with @edit %0."], 'do_dd]>], 'do_dl]>], #[]]>;
 var $help_node links = #[];
 var $help_node nolist = 0;
 var $root created_on = 840586826;
diff -rwu ColdCore-3.0a9.02/src/help_obj_data_lib.cdc ColdCore-3.0a10/src/help_obj_data_lib.cdc
--- ColdCore-3.0a9.02/src/help_obj_data_lib.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_obj_data_lib.cdc	Sat Mar 14 15:49:24 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "Data Lib", "Data Lib"];
-var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["data_lib.unparse_indent", 1]], ["unparse_indent"], 'do_method]>, "(", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a ", <$format, ["link", [["node", "$help_coldc_types"]], ["valid ColdC data"], 'do_link]>, " item as an argument, and returns a textual representation similar to the result of a ", <$format, ["link", [["node", "$help_func_toliteral"]], ["toliteral"], 'do_link]>, "() call, except in a more driver-friendly manner."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["data_lib.data_map", 1]], ["data_map"], 'do_method]>, "(", <$format, ["var", [], ["val"], 'do_var]>, ", ", <$format, ["var", [], ["method"], 'do_var]>, ", ", <$format, ["var", [], ["options"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Maps a method over elements of any data structure. You can use it to map a function inside a list on a frob, for instance. Options decide which data types and frob classes will be affected and which will be left alone. Okay, options is a dict of [key, value] pairs.", <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], ["['object, something]"], 'do_dt]>, <$format, ["dd", [], ["If its an object, it calls the method from that object, otherwise it calls it from data value."], 'do_dd]>, <$format, ["dt", [], ["['list,1]"], 'do_dt]>, <$format, ["dd", [], ["map into lists."], 'do_dd]>, <$format, ["dt", [], ["['dictionary,1]"], 'do_dt]>, <$format, ["dd", [], ["map into dicts."], 'do_dd]>, <$format, ["dt", [], ["['frob,1]"], 'do_dt]>, <$format, ["dd", [], ["map into frobs, you have to use the option 'class to tell it the class to affect."], 'do_dd]>, <$format, ["dt", [], ["['all,1]"], 'do_dt]>, <$format, ["dd", [], ["affect all types."], 'do_dd]>, <$format, ["dt", [], ["[type, 1]"], 'do_dt]>, <$format, ["dd", [], ["affect the types not mentioned above."], 'do_dd]>], 'do_dl]>], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["data_lib.is_valid_type", 1]], ["is_valid_type"], 'do_method]>, "(", <$format, ["var", [], ["type"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Given a ", <$format, ["link", [["node", "$help_coldc_types_symbols"]], ["symbol"], 'do_link]>, ", returns true if it is a ", <$format, ["link", [["node", "$help_coldc_types"]], ["valid ColdC type"], 'do_link]>, ", false if not."], 'do_dd]>], 'do_dl]>], #[['links, #[["valid ColdC data", "$help_coldc_types"], ["toliteral", "$help_func_toliteral"], ["symbol", "$help_coldc_types_symbols"], ["valid ColdC type", "$help_coldc_types"]]]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["data_lib.unparse_indent", 1]], ["unparse_indent"], 'do_method]>, "(", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a ", <$format, ["link", [["node", "$help_coldc_types"]], ["valid ColdC data"], 'do_link]>, " item as an argument, and returns a textual representation similar to the result of a ", <$format, ["link", [["node", "$help_func_toliteral"]], ["toliteral"], 'do_link]>, "() call, except in a more driver-friendly manner."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["data_lib.unparse_indent_html", 1]], ["unparse_indent_html"], 'do_method]>, "(", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a ", <$format, ["link", [["node", "$help_coldc_types"]], ["valid ColdC data"], 'do_link]>, " item as an argument and calls .", <$format, ["method", [["data_lib.unparse_indent", 1]], ["unparse_indent"], 'do_method]>, "() with it. It then post-processes the data converting it to HTML. Conversions performed are converting various characters to the valid HTML entity and linking objects the web view of them via /bin/display."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["data_lib.data_map", 1]], ["data_map"], 'do_method]>, "(", <$format, ["var", [], ["val"], 'do_var]>, ", ", <$format, ["var", [], ["method"], 'do_var]>, ", ", <$format, ["var", [], ["options"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Maps a method over elements of any data structure. You can use it to map a function inside a list on a frob, for instance. Options decide which data types and frob classes will be affected and which will be left alone. Options is a dict of [key, value] pairs."], 'do_dd]>, <$format, ["dl", [["columned", 1]], [<$format, ["dt", [], ["['object, something]"], 'do_dt]>, <$format, ["dd", [], ["If its an object, it calls the method from that object, otherwise it calls it from data value."], 'do_dd]>, <$format, ["dt", [], ["['list,1]"], 'do_dt]>, <$format, ["dd", [], ["Map into lists."], 'do_dd]>, <$format, ["dt", [], ["['dictionary,1]"], 'do_dt]>, <$format, ["dd", [], ["Map into dicts."], 'do_dd]>, <$format, ["dt", [], ["['frob,1]"], 'do_dt]>, <$format, ["dd", [], ["Map into frobs. You must use the option 'class to specify the class to affect."], 'do_dd]>, <$format, ["dt", [], ["['all,1]"], 'do_dt]>, <$format, ["dd", [], ["Affect all types."], 'do_dd]>, <$format, ["dt", [], ["[type, 1]"], 'do_dt]>, <$format, ["dd", [], ["Affect the types not mentioned above."], 'do_dd]>], 'do_dl]>, <$format, ["dt", [], [".", <$format, ["method", [["data_lib.is_valid_type", 1]], ["is_valid_type"], 'do_method]>, "(", <$format, ["var", [], ["type"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Given a ", <$format, ["link", [["node", "$help_coldc_types_symbols"]], ["symbol"], 'do_link]>, ", returns true if it is a ", <$format, ["link", [["node", "$help_coldc_types"]], ["valid ColdC type"], 'do_link]>, ", false if not."], 'do_dd]>], 'do_dl]>], #[['links, #[["valid ColdC data", "$help_coldc_types"], ["toliteral", "$help_func_toliteral"], ["symbol", "$help_coldc_types_symbols"], ["valid ColdC type", "$help_coldc_types"]]]]]>;
 var $help_node index = $help_index_objects;
 var $help_node links = #[["valid ColdC data", $help_coldc_types], ["toliteral", $help_func_toliteral], ["symbol", $help_coldc_types_symbols], ["valid ColdC type", $help_coldc_types]];
 var $root created_on = 870208061;
diff -rwu ColdCore-3.0a9.02/src/help_obj_has_text_methods.cdc ColdCore-3.0a10/src/help_obj_has_text_methods.cdc
--- ColdCore-3.0a9.02/src/help_obj_has_text_methods.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_obj_has_text_methods.cdc	Sat Mar 14 15:49:23 1998
@@ -3,7 +3,7 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "Methods", "Methods"];
-var $help_node body = <$ctext_frob, [[<$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, " ", <$format, ["subj", [["level", "4"]], ["Accessors"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [<$format, ["quote", [], [".text()"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Returns the text in the format it is stored in, either plaintext or the frob representation of CML."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".get_raw_text()"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Returns the raw text to be edited. For plaintext, this is the text, while for CML, this will be the decompiled CML in it's raw form."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".lines()"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Returns a number identifying how many lines of text there are. Note that with CML, this is not accurate for the formatted output but rather for the uncompiled CML text."], 'do_dd]>], 'do_dl]>, <$format, ["subj", [["level", "4"]], ["Mutators"], 'do_subj]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".set_text(txt)"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Accepts either a single line of text or a list of lines as input. If the text is set to not be plaintext, it will compile the text with the CML compiler."], 'do_dd]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".ins_line(txt, [loc])"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Accepts a line of text and an optional location (given by line number) for where to put it. If the location is not specified, it defaults to adding the line of text at the end."], 'do_dd]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".del_text()"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Clears the text."], 'do_dd]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".del_line(linestr)"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Removes the first instance of the string (must be a complete line) given as the argument from the text."], 'do_dd]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".del_nline(nline)"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Removes the line specified by the line number given as the argument from the text."], 'do_dd]>, " ", <$format, ["dt", [], [<$format, ["quote", [], [".ins_lines(lines, loc)"], 'do_quote]>], 'do_dt]>, " ", <$format, ["dd", [], ["Inserts the list of strings at the specified location."], 'do_dd]>, "}"], #[]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, " ", <$format, ["subj", [["level", "4"]], ["Accessors"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["has_text.text", 1]], ["text"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the text in the format it is stored in, either plaintext or the frob representation of CML."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["has_text.get_raw_text", 1]], ["get_raw_text"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the raw text to be edited. For plaintext, this is the text, while for CML, this will be the decompiled CML in it's raw form."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["has_text.lines", 1]], ["lines"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns a number identifying how many lines of text there are. Note that with CML, this is not accurate for the formatted output but rather for the uncompiled CML text."], 'do_dd]>], 'do_dl]>, <$format, ["subj", [["level", "4"]], ["Mutators"], 'do_subj]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.set_text", 1]], ["set_text"], 'do_method]>, "(", <$format, ["var", [], ["txt"], 'do_var]>, ")"], 'do_dt]>, " ", <$format, ["dd", [], ["Accepts either a single line of text or a list of lines as input. If the text is set to not be plaintext, it will compile the text with the CML compiler."], 'do_dd]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.ins_line", 1]], ["ins_line"], 'do_method]>, "(", <$format, ["var", [], ["txt"], 'do_var]>, ", [", <$format, ["var", [], ["loc"], 'do_var]>, "])"], 'do_dt]>, " ", <$format, ["dd", [], ["Accepts a line of text and an optional location (given by line number) for where to put it. If the location is not specified, it defaults to adding the line of text at the end."], 'do_dd]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.del_text", 1]], ["del_text"], 'do_method]>, "()"], 'do_dt]>, " ", <$format, ["dd", [], ["Clears the text."], 'do_dd]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.del_line", 1]], ["del_line"], 'do_method]>, "(", <$format, ["var", [], ["linestr"], 'do_var]>, ")"], 'do_dt]>, " ", <$format, ["dd", [], ["Removes the first instance of the string (must be a complete line) given as the argument from the text."], 'do_dd]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.del_nline", 1]], ["del_nline"], 'do_method]>, "(", <$format, ["var", [], ["nline"], 'do_var]>, ")"], 'do_dt]>, " ", <$format, ["dd", [], ["Removes the line specified by the line number given as the argument from the text."], 'do_dd]>, " ", <$format, ["dt", [], [".", <$format, ["method", [["has_text.ins_lines", 1]], ["ins_lines"], 'do_method]>, "(", <$format, ["var", [], ["lines"], 'do_var]>, ", ", <$format, ["var", [], ["loc"], 'do_var]>, ")"], 'do_dt]>, " ", <$format, ["dd", [], ["Inserts the list of strings at the specified location."], 'do_dd]>, "}"], #[]]>;
 var $help_node links = #[];
 var $root created_on = 864416982;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_obj_object_lib.cdc ColdCore-3.0a10/src/help_obj_object_lib.cdc
--- ColdCore-3.0a9.02/src/help_obj_object_lib.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_obj_object_lib.cdc	Sat Mar 14 15:49:24 1998
@@ -3,9 +3,9 @@
 
 var $dmi_data descriptions = #[];
 var $has_name name = ['prop, "Object Lib", "Object Lib"];
-var $help_node body = <$ctext_frob, [[<$format, ["dl", [["ind", "8"]], [<$format, ["dt", [], [".", <$format, ["method", [["object_lib.to_dbref", 1]], ["to_dbref"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts strings or objnums and returns a valid objnum."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.get_name", 1]], ["get_name"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.see_perms", 1]], ["see_perms"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.str_to_objlist", 1]], ["str_to_objlist"], 'do_method]>, "(", <$format, ["var", [], ["args"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.list_to_objlist", 1]], ["list_to_objlist"], 'do_method]>, "(", <$format, ["var", [], ["args"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.parse_method_flags", 1]], ["parse_method_flags"], 'do_method]>, "(", <$format, ["var", [], ["flags"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.format_object", 1]], ["format_object"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ", ", <$format, ["var", [], ["chop"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.format_method_header", 1]], ["format_method_header"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ", ", <$format, ["var", [], ["method"], 'do_var]>, ", ", <$format, ["var", [], ["opt"], 'do_var]>, ", ", <$format, ["var", [], ["flags"], 'do_var]>, ", ", <$format, ["var", [], ["access"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [["ind", "8"]], [<$format, ["dt", [], [".", <$format, ["method", [["object_lib.to_dbref", 1]], ["to_dbref"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts strings or objnums and returns a valid objnum. Can throw ~namenf, ~objnf, or ~invdbref."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.get_name", 1]], ["get_name"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Returns the name of the object. Accepts two optional args. The first is the name of the method to call on the object to return the name. This defaults to 'name. The second argument must be a list, and should contain the list of arguments with which to call the method returning the name of the object."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.see_perms", 1]], ["see_perms"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, "[, ", <$format, ["var", [], ["@args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Accepts an object as the first argument and displays it's flags in a succint manner. The optional args should be two in number, both of them strings. These are used as the first and last character of the string returned and default to '[' and ']'."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.str_to_objlist", 1]], ["str_to_objlist"], 'do_method]>, "(", <$format, ["var", [], ["args"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a list in string form that is either in english form or delimited by spaces. It then explodes the list into a string and calls .", <$format, ["method", [["object_lib.list_to_objlist", 1]], ["list_to_objlist"], 'do_method]>, "() and returns the result. See the help on .", <$format, ["method", [["object_lib.list_to_objlist", 1]], ["list_to_objlist"], 'do_method]>, "() for further details."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.list_to_objlist", 1]], ["list_to_objlist"], 'do_method]>, "(", <$format, ["var", [], ["args"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a list and attempts to convert each element to a dbref. It returns a dictionary with two keys. 'valid contains a list of the valid dbrefs. 'invalid contains a list of the invalid elements of the list passed in as the argument."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.parse_method_flags", 1]], ["parse_method_flags"], 'do_method]>, "(", <$format, ["var", [], ["flags"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a list of method flags and returns a short string summarizing them. This method is used by ", <$format, ["link", [["node", "$help_cmd_display"]], ["@display"], 'do_link]>, " and other commands."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.format_object", 1]], ["format_object"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ", ", <$format, ["var", [], ["chop"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts an object and a boolean flag ", <$format, ["var", [], ["chop"], 'do_var]>, ". Formats some general information about the object. Used by ", <$format, ["link", [["node", "$help_cmd_display"]], ["@display"], 'do_link]>, " mainly."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["object_lib.format_method_header", 1]], ["format_method_header"], 'do_method]>, "(", <$format, ["var", [], ["obj"], 'do_var]>, ", ", <$format, ["var", [], ["method"], 'do_var]>, ", ", <$format, ["var", [], ["opt"], 'do_var]>, ", ", <$format, ["var", [], ["flags"], 'do_var]>, ", ", <$format, ["var", [], ["access"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts an object, method name, string, method flags and method access and returns a method header in '@program' format."], 'do_dd]>], 'do_dl]>], #[['links, #[["@display", "$help_cmd_display"]]]]]>;
 var $help_node index = $help_index_objects;
-var $help_node links = #[];
+var $help_node links = #[["@display", $help_cmd_display]];
 var $root created_on = 870210595;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_obj_trie.cdc ColdCore-3.0a10/src/help_obj_trie.cdc
--- ColdCore-3.0a9.02/src/help_obj_trie.cdc	Sat Mar 14 15:40:45 1998
+++ ColdCore-3.0a10/src/help_obj_trie.cdc	Sat Mar 14 15:49:23 1998
@@ -2,7 +2,7 @@
 new object $help_obj_trie: $help_obj;
 
 var $has_name name = ['prop, "Trie", "Trie"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Trie is a datastructure that behaves like dictionary with string keys, except that it allows fast match_begin with all the keys. Also, key may be associated with a value list instead of a single value. Its memory overhead is about twice that of a dictionary, and all the operations are slower, except match_begin (which, unlike the dictionary's, does not have to loop through all the keys). Empty trie is represented as ", <$format, ["tt", [], ["<$trie,[0,\"\"]>"], 'do_tt]>, ".", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [<$format, ["quote", [], [".add(key, value[,value...])"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Associate a list of values with a key."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".del(key)"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Remove the key from trie."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".match_exact(key)"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Find an exact match to the key."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".match_begin(key)"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Find an approximate match."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".keys()"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Get a list of the keys. This is very slow operation."], 'do_dd]>, <$format, ["dt", [], [<$format, ["quote", [], [".to_dict(), $dictionary.to_trie(dict)"], 'do_quote]>], 'do_dt]>, <$format, ["dd", [], ["Conversions. The first one converts a trie with a single-element values into dictionary, reverse converts a dictionary with string keys to trie."], 'do_dd]>], 'do_dl]>], #[['this, $help_obj_trie]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Trie is a datastructure that behaves like dictionary with string keys, except that it allows fast match_begin with all the keys. Also, key may be associated with a value list instead of a single value. Its memory overhead is about twice that of a dictionary, and all the operations are slower, except match_begin (which, unlike the dictionary's, does not have to loop through all the keys). Empty trie is represented as ", <$format, ["tt", [], ["<$trie,[0,\"\"]>"], 'do_tt]>, ".", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["trie.add", 1]], ["add"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ", ", <$format, ["var", [], ["value"], 'do_var]>, "[,", <$format, ["var", [], ["value"], 'do_var]>, "...])"], 'do_dt]>, <$format, ["dd", [], ["Associate a list of values with a key."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["trie.del", 1]], ["del"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Remove the key from trie."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["trie.match_exact", 1]], ["match_exact"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Find an exact match to the key."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["trie.match_begin", 1]], ["match_begin"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Find an approximate match."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["trie.keys", 1]], ["keys"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Get a list of the keys. This is very slow operation."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["trie.to_dict", 1]], ["to_dict"], 'do_method]>, "(), $dictionary.", <$format, ["method", [["dictionary.to_trie", 1]], ["to_trie"], 'do_method]>, "(", <$format, ["var", [], ["dict"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Conversions. The first one converts a trie with a single-element values into dictionary, reverse converts a dictionary with string keys to trie."], 'do_dd]>], 'do_dl]>], #[]]>;
 var $help_node group = 1;
 var $help_node index = $help_index_objects;
 var $help_node links = #[];
diff -rwu ColdCore-3.0a9.02/src/help_places_paths.cdc ColdCore-3.0a10/src/help_places_paths.cdc
--- ColdCore-3.0a9.02/src/help_places_paths.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_places_paths.cdc	Sat Mar 14 15:49:11 1998
@@ -1,15 +1,15 @@
 
 new object $help_places_paths: $help_build_places;
 
-var $has_name name = ['prop, "Exits and Entrances", "Exits and Entrances"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Entrances and Exits to a place are either created with the command ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>, " when rooms are built, or they can be linked later with the command ", <$format, ["link", [["node", "$help_cmd_dig"]], ["@dig"], 'do_link]>, ". Before you can link exits from a room you have to either manage the room you are building from, be trusted by it, or it has to be publicly extendable. You can create a disconnected room to start building from with the command:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@dig My New Room"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Which will create a new place with the name ", <$format, ["i", [], ["My New Room"], 'do_i]>, ". Otherwise, you may need to contact the manager of a room you wish to build from. ", <$format, ["np", [], [], 'do_np]>, "For generic building the command ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>, " is a good starting point. It will give explanations at each step as it prompts you for what is needed (to begin building just type ", <$format, ["tt", [], ["@build"], 'do_tt]>, ")."], #[['links, #[["@build", "$help_cmd_build"], ["@dig", "$help_cmd_dig"]]]]]>;
+var $has_name name = ['prop, "Pathways|paths|exits|entrances", "Pathways|paths|exits|entrances"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Paths connect places to each other. A path can have one or more ways, but usually only have two ways (i.e. down the path and up the path). When you build a place you have the option to specify the exit, or in other words, one way for the path. You can use either the command ", <$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>, ", or the command ", <$format, ["link", [["node", "$help_cmd_dig"]], ["@dig"], 'do_link]>, ", depending upon if you want an interactive or passive user interface. ", <$format, ["np", [], [], 'do_np]>, "Before you can link paths from a place you have to either manage the place you are building from, be trusted by it, or it has to be publicly extendable. You can create a disconnected place to start building from with the command:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@dig My New Room"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Which will create a new place with the name ", <$format, ["tt", [], ["\"My New Room\""], 'do_tt]>, ". Otherwise, you may need to contact the manager of a place you wish to build from."], #[['links, #[["@build", "$help_cmd_build"], ["@dig", "$help_cmd_dig"]]]]]>;
 var $help_node index = $help_index_core;
 var $help_node links = #[["@build", $help_cmd_build], ["@dig", $help_cmd_dig]];
 var $help_node nolist = 0;
 var $root created_on = 856037607;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
 var $root managed = [$help_places_paths];
 var $root manager = $help_places_paths;
 
 
diff -rwu ColdCore-3.0a9.02/src/help_prog_commands.cdc ColdCore-3.0a10/src/help_prog_commands.cdc
--- ColdCore-3.0a9.02/src/help_prog_commands.cdc	Sat Mar 14 15:40:35 1998
+++ ColdCore-3.0a10/src/help_prog_commands.cdc	Sat Mar 14 15:49:11 1998
@@ -2,9 +2,9 @@
 new object $help_prog_commands: $help_prog;
 
 var $has_name name = ['prop, "Programming Commands", "Programming Commands"];
-var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[['this, $help_prog_commands]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["b", [], ["Programmer Commands Listing"], 'do_b]>, " ", <$format, ["np", [], [], 'do_np]>, "The following commands are available to programmers: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_addcmd"]], ["@add-command"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Adds a command to a specific method."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_addparent"]], ["@add-parent"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Adds a parent to the target object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_addshortcut"]], ["@add-shortcut"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Adds a shortcut to a specified command."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_addvariable"]], ["@add-variable"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Adds a variable to the object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_ancestors"]], ["@ancestors"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Shows the objects \"tree\" of parents."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_chparent"]], ["@chp?arents"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Changes parents of object"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_chmanage"]], ["@chman?age"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Changes the manager (owner) of the object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_chmod"]], ["@chmod"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Modifies the access flags on the object or method."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_configsetting"]], ["@config-set?ting"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Allows you to modify the options set when the setting was created."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_display"]], ["@d?isplay"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Displays general information about an object, and optionally shows methods."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_defsetting"]], ["@def-set?ting"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Creates new settings on objects."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_delcmd"]], ["@del-c?ommand"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a command from the object"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_delmethod"]], ["@del-m?ethod"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Deletes a method from an object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_delparent"]], ["@del-p?arent"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a parent from an object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_delshortcut"]], ["@del-s?hortcut"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a defined shortcut to a command."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_delvariable"]], ["@del-v?ariable"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a variable from the object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_descendants"]], ["@descend?ants"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists the objects the have that object as an ancestor."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_dump"]], ["@dump"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["gives a complete textdump of an object"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_eval"]], ["@eval"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Used to test methods without programing them."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_grep"]], ["@grep"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Used to search methods on an object for specific text."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_hlist"]], ["@hl?ist"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Shows a help node in CML text."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_hwrite"]], ["@hw?rite"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["A one chance input to enter CML text for a help node."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_id"]], ["@id"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Summary information similar to @display"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_join"]], ["@join"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Teleports you to a user."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_list"]], ["@list"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists source code for the method."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_move"]], ["@move"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Moves methods or objects to another location"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_move"]], ["@copy"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Copies methods to another location"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_nh"]], ["@new-help-node"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Creates a new help node."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_program"]], ["@program"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Allows user to input data and then save and compile the text with a \".\" on a blank line."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_rehash"]], ["@rehash"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Updates your command cache."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_show"]], ["@show"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Displays methods, variables, messages, and other information about an object or method"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_spawn"]], ["@spawn"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Creates a new object"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_trace"]], ["@trace"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Returns where and object receives an inherited method."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_undefsetting"]], ["@undef-set?ting"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a setting from an object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_which"]], ["@which"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Tells you where the method behind the command is."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['links, #[["@add-command", "$help_cmd_addcmd"], ["@add-parent", "$help_cmd_addparent"], ["@add-shortcut", "$help_cmd_addshortcut"], ["@add-variable", "$help_cmd_addvariable"], ["@ancestors", "$help_cmd_ancestors"], ["@chp?arents", "$help_cmd_chparent"], ["@chman?age", "$help_cmd_chmanage"], ["@chmod", "$help_cmd_chmod"], ["@config-set?ting", "$help_cmd_configsetting"], ["@d?isplay", "$help_cmd_display"], ["@def-set?ting", "$help_cmd_defsetting"], ["@del-c?ommand", "$help_cmd_delcmd"], ["@del-m?ethod", "$help_cmd_delmethod"], ["@del-p?arent", "$help_cmd_delparent"], ["@del-s?hortcut", "$help_cmd_delshortcut"], ["@del-v?ariable", "$help_cmd_delvariable"], ["@descend?ants", "$help_cmd_descendants"], ["@dump", "$help_cmd_dump"], ["@eval", "$help_cmd_eval"], ["@grep", "$help_cmd_grep"], ["@hl?ist", "$help_cmd_hlist"], ["@hw?rite", "$help_cmd_hwrite"], ["@id", "$help_cmd_id"], ["@join", "$help_cmd_join"], ["@list", "$help_cmd_list"], ["@move", "$help_cmd_move"], ["@copy", "$help_cmd_move"], ["@new-help-node", "$help_cmd_nh"], ["@program", "$help_cmd_program"], ["@rehash", "$help_cmd_rehash"], ["@show", "$help_cmd_show"], ["@spawn", "$help_cmd_spawn"], ["@trace", "$help_cmd_trace"], ["@undef-set?ting", "$help_cmd_undefsetting"], ["@which", "$help_cmd_which"]]]]]>;
 var $help_node index = $help_index_core;
-var $help_node links = #[];
+var $help_node links = #[["@add-command", $help_cmd_addcmd], ["@add-parent", $help_cmd_addparent], ["@add-shortcut", $help_cmd_addshortcut], ["@add-variable", $help_cmd_addvariable], ["@ancestors", $help_cmd_ancestors], ["@chp?arents", $help_cmd_chparent], ["@chman?age", $help_cmd_chmanage], ["@chmod", $help_cmd_chmod], ["@config-set?ting", $help_cmd_configsetting], ["@d?isplay", $help_cmd_display], ["@def-set?ting", $help_cmd_defsetting], ["@del-c?ommand", $help_cmd_delcmd], ["@del-m?ethod", $help_cmd_delmethod], ["@del-p?arent", $help_cmd_delparent], ["@del-s?hortcut", $help_cmd_delshortcut], ["@del-v?ariable", $help_cmd_delvariable], ["@descend?ants", $help_cmd_descendants], ["@dump", $help_cmd_dump], ["@eval", $help_cmd_eval], ["@grep", $help_cmd_grep], ["@hl?ist", $help_cmd_hlist], ["@hw?rite", $help_cmd_hwrite], ["@id", $help_cmd_id], ["@join", $help_cmd_join], ["@list", $help_cmd_list], ["@move", $help_cmd_move], ["@copy", $help_cmd_move], ["@new-help-node", $help_cmd_nh], ["@program", $help_cmd_program], ["@rehash", $help_cmd_rehash], ["@show", $help_cmd_show], ["@spawn", $help_cmd_spawn], ["@trace", $help_cmd_trace], ["@undef-set?ting", $help_cmd_undefsetting], ["@which", $help_cmd_which]];
 var $help_node nolist = 0;
 var $root created_on = 846999554;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/help_sys.cdc ColdCore-3.0a10/src/help_sys.cdc
--- ColdCore-3.0a9.02/src/help_sys.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_sys.cdc	Sat Mar 14 15:49:24 1998
@@ -2,7 +2,7 @@
 new object $help_sys: $help_core;
 
 var $dmi_data descriptions = #[];
-var $has_name name = ['prop, "SubSystems", "SubSystems"];
+var $has_name name = ['prop, "Subsystems", "Subsystems"];
 var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
 var $help_node group = 1;
 var $help_node links = #[];
diff -rwu ColdCore-3.0a9.02/src/help_sys_climate.cdc ColdCore-3.0a10/src/help_sys_climate.cdc
--- ColdCore-3.0a9.02/src/help_sys_climate.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_sys_climate.cdc	Sat Mar 14 15:49:24 1998
@@ -2,7 +2,7 @@
 new object $help_sys_climate: $help_weather_system;
 
 var $has_name name = ['prop, "Climate", "Climate"];
-var $help_node body = <$ctext_frob, [["Climate is a container for multiple weathers with assigned probabilities. Climate holds the following information:", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], ["A list of season names."], 'do_li]>, <$format, ["li", [], ["A list of daylengths assigned to each season. Daylength is given as an offset, meaning that with +2, you have an early sunrise and late sunset. This number is interpreted by $world_time."], 'do_li]>, <$format, ["li", [], ["A list of weathers, each with probabilities for every season. Probabilities are not percentages, instead, only their ratios really matter."], 'do_li]>], 'do_ul]>, <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Climate commands"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], ["@setup <this> seasons <any> daylengths <any>"], 'do_dt]>, <$format, ["dd", [], ["Erases all the data on a climate object, sets a new season list and daylength lists. Both arguments are list of items separated by space; they must be of the same length."], 'do_dd]>, <$format, ["dt", [], ["@list-climate <this>"], 'do_dt]>, <$format, ["dd", [], ["Shows the information on climate."], 'do_dd]>, <$format, ["dt", [], ["@add-weather <this> type <descendant of $weather> prob?abilities <any>"], 'do_dt]>, <$format, ["dd", [], ["Adds a weather object to $climate; the object must be already built. Probabilities is a ' '-separated list of integers, one element for each season."], 'do_dd]>, <$format, ["dt", [], ["@del-weather <this> type <descendant of $weather>"], 'do_dt]>, <$format, ["dd", [], ["Removes weather from the climate."], 'do_dd]>], 'do_dl]>], #[['this, $help_sys_climate]]]>;
+var $help_node body = <$ctext_frob, [["Instances of the climate object are used to define general weather patterns for an area. The following information is stored on each climate object:", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], ["A list of season names."], 'do_li]>, <$format, ["li", [], ["A list of daylengths assigned to each season. Daylength is given as an offset, meaning that with +2, you have an early sunrise and late sunset. This number is interpreted by $world_time."], 'do_li]>, <$format, ["li", [], ["A list of weathers, each with probabilities for every season. Probabilities are not percentages, instead, only their ratios really matter."], 'do_li]>], 'do_ul]>, <$format, ["subj", [["level", "3"]], ["Climate commands"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], ["@setup <this> seasons <any> daylengths <any>"], 'do_dt]>, <$format, ["dd", [], ["Erases all the data on a climate object, sets a new season list and daylength lists. Both arguments are list of items separated by space; they must be of the same length."], 'do_dd]>, <$format, ["dt", [], ["@list-climate <this>"], 'do_dt]>, <$format, ["dd", [], ["Shows the information on climate."], 'do_dd]>, <$format, ["dt", [], ["@add-weather <this> type <descendant of $weather> prob?abilities <any>"], 'do_dt]>, <$format, ["dd", [], ["Adds a weather object to $climate; the object must be already built. Probabilities is a ' '-separated list of integers, one element for each season."], 'do_dd]>, <$format, ["dt", [], ["@del-weather <this> type <descendant of $weather>"], 'do_dt]>, <$format, ["dd", [], ["Removes weather from the climate."], 'do_dd]>], 'do_dl]>, <$format, ["p", [], [], 'do_p]>, "No climate patterns should ever be defined on the base $climate object."], #[]]>;
 var $help_node index = $help_index_core;
 var $help_node links = #[];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_sys_weather_attributes.cdc ColdCore-3.0a10/src/help_sys_weather_attributes.cdc
--- ColdCore-3.0a9.02/src/help_sys_weather_attributes.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_sys_weather_attributes.cdc	Sat Mar 14 15:49:24 1998
@@ -3,7 +3,7 @@
 
 var $has_name name = ['prop, "Attributes", "Attributes"];
 var $has_name templates = ["Weather Attributes"];
-var $help_node body = <$ctext_frob, [["Weather attributes are general characteristics a weather might have, such as humidity, precipitation, and so on. They are usable as generators in room descs, allowing one to speak about 'rivulets of rain sliding down the ravine' only if it really is raining, or to say that 'it's terribly hot' only if it really is hot. In addition to that, one can add more complex 'extra' attributes. These are not set on the weather, but are calculated from the existing attributes; for example, you can use them as switchers for 'is it a hot, humid night'? cases. Note that you shouldn't fiddle with this object too much once you set its attributes for the first time, because otherwise you may need to reset the weathers objects.", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Weather attribute commands"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], ["@add-weather-attribute|awa <any> values <any> to <this>"], 'do_dt]>, <$format, ["dd", [], ["Adds a new weather attribute. Values is a list of descripting values separated by ';'. For example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@awa precipitation values none;rain;heavy rain;snow to $weather_attributes"], 'do_dfn]>], 'do_dd]>, <$format, ["dt", [], ["@add-extra-attribute|@aea <any> values <any> to <this>"], 'do_dt]>, <$format, ["dd", [], ["Adds extra attribute. Unlike normal attribs, these don't need to be set on the weather objects."], 'do_dd]>, <$format, ["dt", [], ["@del-weather-attribute|dwa <any> from <this>"], 'do_dt]>, <$format, ["dd", [], ["Removes a weather attribute."], 'do_dd]>, <$format, ["dt", [], ["@list-weather-attributes|lwa <this>"], 'do_dt]>, <$format, ["dd", [], ["Lists the current setup."], 'do_dd]>], 'do_dl]>, <$format, ["subj", [["level", "3"]], ["Default attributes"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "These attributes are set in the coldcore as-is. Modify them only if you are prepared to use @set weather:attributes on all descendants of ", <$format, ["link", [["node", "$help_sys_weather"]], ["Generic Weather"], 'do_link]>, ".", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], ["precipitation"], 'do_td]>, <$format, ["td", [], ["fine;drizzle;rain;shower;snow"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["humidity"], 'do_td]>, <$format, ["td", [], ["dry;fine;humid"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["temperature"], 'do_td]>, <$format, ["td", [], ["hot;warm;cold;freezing"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["visibility"], 'do_td]>, <$format, ["td", [], ["clear;hazy;murky"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["wind"], 'do_td]>, <$format, ["td", [], ["serene;windy;stormy"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["clouds"], 'do_td]>, <$format, ["td", [], ["clear;cloudy;overcast"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['this, $help_sys_weather_attributes]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Weather attributes are general characteristics a weather might have, such as humidity, precipitation, and so on. They can be used as generators in room descriptions, allowing builders to refer to 'rivulets of rain sliding down the ravine' only if it really is raining, or to say that 'it's terribly hot' only if it really is hot. ", <$format, ["np", [], [], 'do_np]>, "In addition, one can add more complex 'extra' attributes. These are not set on the weather, but are calculated from the existing attributes; for example, you can use them as cases in a switch for 'is it a hot, humid night?'. Note: you should not fiddle with this object too much after its attributes are set, because you will also need to reset each weather object. ", <$format, ["subj", [["level", "3"]], ["Weather attribute commands"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], ["@add-weather-attribute|awa <any> values <any> to <this>"], 'do_dt]>, <$format, ["dd", [], ["Adds a new weather attribute. Values is a list of descripting values separated by ';'. For example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@awa precipitation values none;rain;heavy rain;snow to $weather_attributes"], 'do_dfn]>], 'do_dd]>, <$format, ["dt", [], ["@add-extra-attribute|@aea <any> values <any> to <this>"], 'do_dt]>, <$format, ["dd", [], ["Adds extra attribute. Unlike normal attribs, these don't need to be set on the weather objects."], 'do_dd]>, <$format, ["dt", [], ["@del-weather-attribute|dwa <any> from <this>"], 'do_dt]>, <$format, ["dd", [], ["Removes a weather attribute."], 'do_dd]>, <$format, ["dt", [], ["@list-weather-attributes|lwa <this>"], 'do_dt]>, <$format, ["dd", [], ["Lists the current setup."], 'do_dd]>], 'do_dl]>, <$format, ["subj", [["level", "3"]], ["Default attributes"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "These attributes are set in the coldcore as-is. Modify them only if you are prepared to use @set weather:attributes on all descendants of ", <$format, ["link", [["node", "$help_sys_weather"]], ["Generic Weather"], 'do_link]>, ". ", <$format, ["dfn", [["nobound", 1]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], ["precipitation"], 'do_td]>, <$format, ["td", [], ["fine;drizzle;rain;shower;snow"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["humidity"], 'do_td]>, <$format, ["td", [], ["dry;fine;humid"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["temperature"], 'do_td]>, <$format, ["td", [], ["hot;warm;cold;freezing"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["visibility"], 'do_td]>, <$format, ["td", [], ["clear;hazy;murky"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["wind"], 'do_td]>, <$format, ["td", [], ["serene;windy;stormy"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], ["clouds"], 'do_td]>, <$format, ["td", [], ["clear;cloudy;overcast"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['links, #[["Generic Weather", "$help_sys_weather"]]]]]>;
 var $help_node index = $help_index_core;
 var $help_node links = #[["Generic Weather", $help_sys_weather]];
 var $help_node nolist = 0;
diff -rwu ColdCore-3.0a9.02/src/help_ui.cdc ColdCore-3.0a10/src/help_ui.cdc
--- ColdCore-3.0a9.02/src/help_ui.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/help_ui.cdc	Sat Mar 14 15:49:04 1998
@@ -1,6 +1,9 @@
 
 new object $help_ui: $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@help", [["@help", "*", "@help <any>", 'help_cmd, #[[1, ['any, []]]]]]]];
 var $has_commands shortcuts = #[["?*", ['help_cmd, ["?", 1]]]];
@@ -8,7 +11,6 @@
 var $help_ui history = [$help_coldcore];
 var $help_ui index = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$help_ui];
@@ -313,6 +315,8 @@
             throw(~nonode, ((("Unable to find help on \"" + (m[2])) + "\" in the ") + (i.name())) + " index.");
         return node;
     }
+    if (">" in str)
+        return (> .step_help_nodes(split(str, " *> *")) <);
     if ((m = regexp(str, " *([a-z][0-9a-z_]+)\( *\)"))) {
         i = "help_func_" + (m[1]);
         if ((node = (| lookup(tosym(i)) |)))
@@ -353,6 +353,32 @@
         history = (history ? sublist(history, 1, current) : []) + [node];
     }
     current = node in history;
+};
+
+protected method .step_help_nodes() {
+    arg hist;
+    var sn, node;
+    
+    // start from the same base
+    .set_help_node($help_lib.default_node());
+    for sn in (hist) {
+        if ((node = (| .find_help_in_links(sn) |))) {
+            .set_help_node(node);
+            .tell(("Following link for '" + sn) + "'");
+        } else if ((node = (| .find_help_in_group(sn) |))) {
+            .set_help_node(node);
+            .tell(("Following group for '" + sn) + "'");
+        } else {
+            catch any {
+                node = (> .find_help_in_index(sn) <);
+                .set_help_node(node);
+                .tell(("Found '" + sn) + "' in index");
+            } with {
+                throw(~stop, (traceback()[1])[2]);
+            }
+        }
+    }
+    return node;
 };
 
 protected method .tell_help_node() {
diff -rwu ColdCore-3.0a9.02/src/help_updates.cdc ColdCore-3.0a10/src/help_updates.cdc
--- ColdCore-3.0a9.02/src/help_updates.cdc	Sat Mar 14 15:40:43 1998
+++ ColdCore-3.0a10/src/help_updates.cdc	Sat Mar 14 15:49:19 1998
@@ -8,7 +8,7 @@
 var $help_node nolist = 0;
 var $help_updates cleanup_time = 2592000;
 var $help_updates dirty = 2;
-var $help_updates update_list = [[871970400, [$help_theme]]];
+var $help_updates update_list = [[889858800, [$help_theme]]];
 var $root created_on = 848537316;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/help_weather_system.cdc ColdCore-3.0a10/src/help_weather_system.cdc
--- ColdCore-3.0a9.02/src/help_weather_system.cdc	Sat Mar 14 15:40:46 1998
+++ ColdCore-3.0a10/src/help_weather_system.cdc	Sat Mar 14 15:49:24 1998
@@ -2,10 +2,10 @@
 new object $help_weather_system: $help_obj;
 
 var $has_name name = ['prop, "Weather System", "Weather System"];
-var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdCore uses elaborate weather system, allowing the administrators to set realistic weathers and climates, described in great detail. The system is based on several objects, each keeping track of a facet of the weather:", <$format, ["dl", [], [<$format, ["dt", [], ["$world"], 'do_dt]>, <$format, ["dd", [], ["$world keeps the weather cycle, and calls the updates on realms."], 'do_dd]>, <$format, ["dt", [], ["$realm (and descendants)"], 'do_dt]>, <$format, ["dd", [], ["Children of $realm keep track of the current weather and season, as well as of VR timezones."], 'do_dd]>, <$format, ["dt", [], [<$format, ["link", [["node", "$help_sys_climate"]], ["$climate (and descendants)"], 'do_link]>], 'do_dt]>, <$format, ["dd", [], ["$climate keeps the season names for each part of the year, and lists of weathers that may occur in that climate."], 'do_dd]>, <$format, ["dt", [], [<$format, ["link", [["node", "$help_sys_weather"]], ["$weather (and descendants)"], 'do_link]>], 'do_dt]>, <$format, ["dd", [], ["Weather objects contain weather descriptions, messages and attributes. Attributes are the most important, since they can be used to fork room descriptions to reflect conditions in the weather."], 'do_dd]>, <$format, ["dt", [], [<$format, ["link", [["node", "$help_sys_weather_attributes"]], ["$weather_attributes"], 'do_link]>], 'do_dt]>, <$format, ["dd", [], ["This object is a database of all the available weather attributes."], 'do_dd]>], 'do_dl]>, <$format, ["p", [], [], 'do_p]>, "When changing the weather, the system will pay attention to differences between weather attributes (so it'll be unlikely that a storm will start a moment after the sun shining), seasonal ratings, and inter-realm dependancies. ", <$format, ["np", [], [], 'do_np]>, "Follow the links in the list above to read more about the system."], #[['this, $help_weather_system]]]>;
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdCore uses elaborate weather system, allowing the administrators to set realistic weathers and climates. The system is based on several objects, each keeping track of a facet of the weather: ", <$format, ["dfn", [["ind", "4"], ["nobound", 1]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], ["$world"], 'do_td]>, <$format, ["td", [], ["$world keeps the weather cycle, and calls the updates on realms."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["link", [["node", "$help_places_realms"]], ["$realm"], 'do_link]>], 'do_td]>, <$format, ["td", [], ["Children of $realm keep track of the current weather and season, as well as of VR timezones."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["link", [["node", "$help_sys_climate"]], ["$climate"], 'do_link]>], 'do_td]>, <$format, ["td", [], ["$climate keeps the season names for each part of the year, and lists of weathers that may occur in that climate."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["link", [["node", "$help_sys_weather"]], ["$weather"], 'do_link]>], 'do_td]>, <$format, ["td", [], ["Weather objects contain weather descriptions, messages and attributes. Attributes are the most important, since they can be used to fork room descriptions to reflect conditions in the weather."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["link", [["node", "$help_sys_weather_attributes"]], ["$weather_attributes"], 'do_link]>], 'do_td]>, <$format, ["td", [], ["This object is a database of all the available weather attributes."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "When changing the weather, the system will pay attention to differences between weather attributes (so it'll be unlikely that a storm will start a moment after the sun shining), seasonal ratings, and inter-realm dependancies."], #[['links, #[["$realm", "$help_places_realms"], ["$climate", "$help_sys_climate"], ["$weather", "$help_sys_weather"], ["$weather_attributes", "$help_sys_weather_attributes"]]]]]>;
 var $help_node group = 1;
 var $help_node index = $help_index_core;
-var $help_node links = #[["$climate (and descendants)", $help_sys_climate], ["$weather (and descendants)", $help_sys_weather], ["$weather_attributes", $help_sys_weather_attributes]];
+var $help_node links = #[["$realm", $help_places_realms], ["$climate", $help_sys_climate], ["$weather", $help_sys_weather], ["$weather_attributes", $help_sys_weather_attributes]];
 var $help_node nolist = 0;
 var $root created_on = 856455167;
 var $root flags = ['variables, 'methods, 'code, 'core];
diff -rwu ColdCore-3.0a9.02/src/housekeeper.cdc ColdCore-3.0a10/src/housekeeper.cdc
--- ColdCore-3.0a9.02/src/housekeeper.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/housekeeper.cdc	Sat Mar 14 15:49:03 1998
@@ -22,6 +22,7 @@
     arg who;
     var home, curloc;
     
+    who.poll_semaphore('cleanup);
     if (who.connected())
         return;
     (| who.cleanup_sessions() |);
@@ -31,6 +31,7 @@
         return;
     (| who.move_to(home) |) || (> who.move_to($body_cave) <);
     curloc.did_housekeep(who);
+    who.release_semaphore('cleanup);
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/html_format.cdc ColdCore-3.0a10/src/html_format.cdc
--- ColdCore-3.0a9.02/src/html_format.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/html_format.cdc	Sat Mar 14 15:49:03 1998
@@ -219,25 +219,32 @@
 
 public method .do_obj() {
     arg vars, flags, args;
-    var gateway, argname, context, object, name;
+    var gateway, argname, context, object, name, options;
     
     context = flags.getkey("context");
+    options = (| flags.getkey("options") |);
     name = flags.getkey("name");
     object = args[1];
-    
-    // nix this once we figure out why its not always staying a symbol
     if (type(context) == 'string)
         context = tosym(context);
+    if (options && (type(options) == 'string))
+        options = tosym(options);
     switch (context) {
         case 'look:
+            if (options) {
+                if (options == 'exit) {
+                    [gateway, argname] = ["describe", "target"];
+                    object = object.dest(args[2]);
+                } else {
+                    [gateway, argname] = ["describe", "target"];
+                }
+            } else {
             [gateway, argname] = ["describe", "target"];
+            }
         case 'display:
             [gateway, argname] = ["display", "target"];
-        case 'exit:
-            [gateway, argname] = ["describe", "target"];
-            object = object.dest();
     }
-    return [((((((("<a href=\"/bin/" + gateway) + "?") + argname) + "=") + object) + "\">") + name) + "</a>", vars];
+    return ["<a href=\"/bin/%s?%s=%s\">%s</a>".format(gateway, argname.to_html(), toliteral(object).to_html(), name.to_html()), vars];
 };
 
 public method .do_ol() {
diff -rwu ColdCore-3.0a9.02/src/http_interface.cdc ColdCore-3.0a10/src/http_interface.cdc
--- ColdCore-3.0a9.02/src/http_interface.cdc	Sat Mar 14 15:40:47 1998
+++ ColdCore-3.0a10/src/http_interface.cdc	Sat Mar 14 15:49:09 1998
@@ -1,6 +1,8 @@
 
 new object $http_interface: $connection_interface;
 
+var $command_cache commands = 0;
+var $command_cache shortcuts = 0;
 var $dmi_data descriptions = #[];
 var $has_commands local = #[];
 var $has_commands remote = #[];
@@ -12,7 +14,7 @@
 var $http_interface full = 0;
 var $http_interface header = 0;
 var $http_interface http = "HTTP/1.0";
-var $http_interface info = #[];
+var $http_interface info = #[['generate, 'method], ['script_name, "/bin/method"], ['path_info, "/"], ['directory_object, $directories], ['lock_object, 0]];
 var $http_interface keep_alive = 0;
 var $http_interface method = "GET";
 var $http_interface sent = 0;
@@ -26,8 +28,12 @@
 
 public method ._respond() {
     arg input;
-    var output, t;
+    var output, t, user;
     
+    if ($security_lib.check_userdb_with_optional(header['interface]))
+        user = (header['interface]).get_info('run_as);
+    else
+        user = $no_one;
     switch (type(input)) {
         case 'list:
             output = `[];
@@ -38,7 +44,7 @@
         case 'buffer:
             output = input;
         case 'frob:
-            output = $parse_lib.filter_ctext(input, #[['formatter, $html_format]]);
+            output = $parse_lib.filter_ctext(input, #[['formatter, $html_format], ["viewer", user]]);
         default:
             output = str_to_buf((("Error, unable to send output type: " + type(input)) + " -- ") + input);
     }
@@ -128,7 +134,7 @@
         if ((| description['args] |))
             processed_args = $adapter.process_args(args, description['args]);
         else
-            processed_args = #[];
+            processed_args = args;
     } with {
         switch (error()) {
             case ~objnf:
@@ -417,12 +417,18 @@
 
 public method .respond_with_file() {
     arg fstat, filename;
-    var host;
+    var host, tzadjust, datestr;
     
     if (!(sender().is($page)))
         (> .perms(sender(), 'writer) <);
     bytes = fstat[2];
+    catch ~range {
+        tzadjust = localtime()[12];
+        datestr = "%a, %d %b %Y %H:%M:%S GMT";
+        .send_header($time.format("Date: " + datestr, time() + tzadjust), $time.format("Last-modified: " + datestr, (fstat[4]) + tzadjust));
+    } with {
     .send_header();
+    }
     (.connection()).cwritef(filename);
     host = (.connection()).address();
     .log_request(host);
diff -rwu ColdCore-3.0a9.02/src/http_lib.cdc ColdCore-3.0a10/src/http_lib.cdc
--- ColdCore-3.0a9.02/src/http_lib.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/http_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -13,12 +13,34 @@
 
 public method .explode_http_encoding() {
     arg args;
-    var fields, field, values;
+    var fields, field, values, key, value;
+    
+    fields = #[];
+    
+    // temporary hack--we should actually be using .add_elem  --brandon
+    for field in (args.explode("&")) {
+        field = explode(field, "=");
+        key = $http.decode(field[1]);
+        if (listlen(field) > 1)
+            value = $http.decode(field[2]);
+        else
+            value = "";
+        if (dict_contains(fields, key))
+            fields = dict_add(fields, key, ((fields[key]) + ", ") + value);
+        else
+            fields = dict_add(fields, key, value);
+    }
+    return fields;
+};
+
+public method .explode_http_encoding2() {
+    arg args;
+    var fields, field;
     
     fields = #[];
     for field in (args.explode("&")) {
-        field = field.explode("=");
-        fields = fields.add($http.decode(field[1]), (listlen(field) == 1) ? "" : ($http.decode(field[2])));
+        field = field.explode("=", 1);
+        fields = fields.add_elem($http.decode(field[1]), $http.decode(field[2]));
     }
     return fields;
 };
diff -rwu ColdCore-3.0a9.02/src/in_location.cdc ColdCore-3.0a10/src/in_location.cdc
--- ColdCore-3.0a9.02/src/in_location.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/in_location.cdc	Sat Mar 14 15:49:06 1998
@@ -1,6 +1,9 @@
 
 new object $in_location: $located_location;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $foundation defined_msgs = #[["enter", #[['branches, ["actor", "source", "dest"]]]], ["open", #[['branches, ["general", "actor", "inside"]]]], ["close", #[['branches, ["general", "actor", "inside"]]]]];
 var $foundation msgs = #[["enter", #[["actor", <$ctext_frob, [["You enter ", <$generator, ["dest", [], [], 'gen_dest]>, "."], #[]]>], ["source", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " enters ", <$generator, ["dest", [], [], 'gen_dest]>, "."], #[]]>], ["dest", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " enters from ", <$generator, ["source", [], [], 'gen_source]>, "."], #[]]>]]], ["open", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " opens ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>], ["inside", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " opens ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>], ["actor", <$ctext_frob, [["You open ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>]]], ["close", #[["inside", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " closes ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " closes ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>], ["actor", <$ctext_frob, [["You close ", <$generator, ["this", [], [], 'gen_this]>, "."], #[]]>]]]];
@@ -32,8 +35,9 @@
             .set_setting("closed", $in_location, "yes");
             vars = #[["$actor", sender()], ["actor", sender().name()], ["$this", this()], ["this", .name()], ["$inside", this()]];
             m = .eval_message("close", $in_location, vars);
-            (.location()).announce(m);
-            .announce(m);
+            (.location()).announce(m, sender());
+            .announce(m, sender());
+            return m;
         }
     } else {
         return ((.name()).capitalize()) + " cannot be closed.";
@@ -44,11 +48,15 @@
     arg flags;
     var line;
     
+    if ((sender().location()) == this()) {
+        return (> .inside_description(flags) <);
+    } else {
     if (.get_setting("closed", $in_location))
         line = (((.gender()).pronoun('ps)).capitalize()) + " is closed.";
     else
         line = (("Inside " + (.name())) + " you see: ") + ((.contents()).map_to_english('name));
     return (> pass(flags) <) + [line];
+    }
 };
 
 public method .enter_cmd() {
@@ -88,8 +88,9 @@
             .set_setting("closed", $in_location, "no");
             vars = #[["$actor", sender()], ["actor", sender().name()], ["$this", this()], ["this", .name()], ["$inside", this()]];
             m = .eval_message("open", $in_location, vars);
-            (.location()).announce(m);
-            .announce(m);
+            (.location()).announce(m, sender());
+            .announce(m, sender());
+            return m;
         } else {
             return ((.name()).capitalize()) + " is already opened.";
         }
diff -rwu ColdCore-3.0a9.02/src/integer.cdc ColdCore-3.0a10/src/integer.cdc
--- ColdCore-3.0a9.02/src/integer.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/integer.cdc	Sat Mar 14 15:49:02 1998
@@ -96,22 +96,14 @@
 
 public method .to_bytes() {
     arg num, @long;
-    var s;
     
-    if (num > 1073741824) {
-        num /= 1.07374e+09;
-        s = long ? " gigabytes" : " gb";
-    } else if (num > 1048576) {
-        num /= 1.04858e+06;
-        s = long ? " megabytes" : " mb";
-    } else if (num > 1024) {
-        num /= 1024.0;
-        s = long ? " kilobytes" : " kb";
-    } else {
-        s = long ? " bytes" : " b";
-    }
-    num = strsed(tostr(num), "\.0+", "");
-    return num + s;
+    if (num > 1073741824)
+        return strfmt("%.1l", num / 1.07374e+09) + (long ? " gigabytes" : " gb");
+    else if (num > 1048576)
+        return strfmt("%.1l", num / 1.04858e+06) + (long ? " megabytes" : " mb");
+    else if (num > 1024)
+        return strfmt("%.1l", num / 1024.0) + (long ? " kilobytes" : " kb");
+    return num + (long ? " bytes" : " b");
 };
 
 public method .to_english() {
diff -rwu ColdCore-3.0a9.02/src/interface_registry.cdc ColdCore-3.0a10/src/interface_registry.cdc
--- ColdCore-3.0a9.02/src/interface_registry.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/interface_registry.cdc	Sat Mar 14 15:49:10 1998
@@ -49,7 +49,7 @@
     throw(~matchnf, "Object doesn't define that method in the Interface Registry");
 };
 
-public method ._sort_method_index() {
+private method ._sort_method_index() {
     arg method;
     var old_method_index, new_method_index, item;
     
@@ -62,6 +62,8 @@
 public method .add_description() {
     arg object, method, description;
     
+    if (!(object.is_writable_by(sender())))
+        throw(~perm, (tostr(object) + " is not writable by ") + tostr(sender()));
     if (!(object.has_ancestor($dmi_data)))
         throw(~invrequest, object + " must be a child of $dmi_data.");
     (> ._add_method_to_index(object, method) <);
@@ -78,6 +78,8 @@
 public method .del_description() {
     arg object, method;
     
+    if (~object.is_writable_by(sender()))
+        throw(~perm, (tostr(object) + " is not writable by ") + tostr(sender()));
     (> ._del_method_from_index(object, method) <);
     (> object.del_description_from_db(method) <);
 };
diff -rwu ColdCore-3.0a9.02/src/itext.cdc ColdCore-3.0a10/src/itext.cdc
--- ColdCore-3.0a9.02/src/itext.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/itext.cdc	Sat Mar 14 15:49:04 1998
@@ -5,7 +5,6 @@
 var $itext all_text = #[["foo", [["hello", "world"], ""]], ["bar", [["hello", "this", "world"], ""]]];
 var $itext current = "foo";
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$itext];
diff -rwu ColdCore-3.0a9.02/src/libraries.cdc ColdCore-3.0a10/src/libraries.cdc
--- ColdCore-3.0a9.02/src/libraries.cdc	Sat Mar 14 15:40:23 1998
+++ ColdCore-3.0a10/src/libraries.cdc	Sat Mar 14 15:49:02 1998
@@ -2,7 +2,6 @@
 new object $libraries: $core;
 
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$libraries];
diff -rwu ColdCore-3.0a9.02/src/list.cdc ColdCore-3.0a10/src/list.cdc
--- ColdCore-3.0a9.02/src/list.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/list.cdc	Sat Mar 14 15:49:02 1998
@@ -162,6 +162,12 @@
     return toret;
 };
 
+public method .fmt_tb() {
+    arg tb, @args;
+    
+    return $parse_lib.traceback(tb, @args);
+};
+
 public method .fold() {
     arg list, object, method, @args;
     var i, out;
@@ -218,6 +224,14 @@
 
 public method .insert(): native;
 
+public method .intersection() {
+    arg l1, l2;
+    var i;
+    
+    // set intersection of the arguments
+    return filter i in (l1) where (i in l2);
+};
+
 public method .join(): native;
 
 public method .last() {
@@ -299,11 +313,37 @@
 
 public method .match_object() {
     arg objs, str;
+    var obj, found, l, f;
+    
+    found = [];
+    for obj in (objs) {
+        if ((type(obj) == 'frob) && (!valid(frob_class(obj))))
+            throw(~badfrob, "Bad Thing Frob", obj);
+        else if (obj.match_name(str))
+            found += [obj];
+    }
+    if (listlen(found) == 1)
+        return found[1];
+    if (listlen(found) > 1) {
+        if ((f = filter f in (found) where ((f.name()) == str))) {
+            if (listlen(f) == 1)
+                return f[1];
+            found = f;
+        }
+        throw(~ambig, "ambiguous match", found);
+    }
+    throw(~objnf, "Object not found.");
+};
+
+public method .match_object2() {
+    arg objs, str;
     var obj, found;
     
     found = [];
     for obj in (objs) {
-        if (obj.match_name(str))
+        if ((type(obj) == 'frob) && (!valid(frob_class(obj))))
+            (<$thing_frob, frob_value(obj)>).discard();
+        else if (obj.match_name(str))
             found += [obj];
     }
     if (listlen(found) == 1)
@@ -383,6 +423,13 @@
     return ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"];
 };
 
+public method .odds() {
+    arg list;
+    var chunk, mode;
+    
+    return filter chunk in (list) where ((mode = !mode));
+};
+
 public method .omap() {
     arg list, object, method, @args;
     var obj;
@@ -522,6 +522,8 @@
     var ret, i;
     
     // returns a sum of each element in the list.
+    if (!data)
+        return 0;
     [ret, @data] = data;
     for i in (data)
         ret += i;
diff -rwu ColdCore-3.0a9.02/src/located.cdc ColdCore-3.0a10/src/located.cdc
--- ColdCore-3.0a9.02/src/located.cdc	Sat Mar 14 15:40:28 1998
+++ ColdCore-3.0a10/src/located.cdc	Sat Mar 14 15:49:03 1998
@@ -4,7 +4,7 @@
 var $described prose = [];
 var $has_name name = ['uniq, "Generic Located Object", "the Generic Located Object"];
 var $located inited = 0;
-var $located location = $lost_and_found;
+var $located location = $nowhere;
 var $located obvious = 1;
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
@@ -16,13 +16,16 @@
     
     // cleanup events  
     .unhook_events('move, old_place);
-    old_place.send_event('movement, 'leave, old_place);
-    location.send_event('movement, 'arrive);
+    old_place.send_event('movement, 'leave, location);
+    location.send_event('movement, 'arrive, old_place);
     .hook_events('move);
 };
 
 public method .environment() {
-    return [this()] + ((location.environment()).setremove(this()));
+    var env;
+    
+    env = setremove(location.environment(), this());
+    return [this()] + env;
 };
 
 root method .init_located() {
@@ -94,7 +97,7 @@
 };
 
 public method .realm() {
-    return realm;
+    return (.location()).realm();
 };
 
 public method .realm_name() {
@@ -118,7 +118,11 @@
 };
 
 root method .uninit_located() {
-    (.location()).del_sender_from_contents();
+    var location;
+    
+    location = .location();
+    location.del_sender_from_contents();
+    location.did_leave($nowhere);
 };
 
 public method .will_move() {
diff -rwu ColdCore-3.0a9.02/src/located_location.cdc ColdCore-3.0a10/src/located_location.cdc
--- ColdCore-3.0a9.02/src/located_location.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/located_location.cdc	Sat Mar 14 15:49:04 1998
@@ -1,6 +1,9 @@
 
 new object $located_location: $thing, $location;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands remote = #[];
 var $has_name name = ['uniq, "Generic Located Location", "the Generic Located Location"];
@@ -8,7 +8,6 @@
 var $located obvious = 1;
*var $location contents = ' ' located_location.cdc
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$located_location];
diff -rwu ColdCore-3.0a9.02/src/location.cdc ColdCore-3.0a10/src/location.cdc
--- ColdCore-3.0a9.02/src/location.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/location.cdc	Sat Mar 14 15:49:04 1998
@@ -1,12 +1,14 @@
 
 new object $location: $physical, $command_cache;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands shortcuts = #[];
 var $has_name name = ['uniq, "Generic Container Object", "the Generic Container Object"];
*var $location contents = ' ' location.cdc
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$location];
@@ -69,8 +71,7 @@
 public method .del_frob_from_contents() {
     arg frob;
     
-    if ((!(sender().is($thing_frob))) && (sender() != this()))
-        throw(~perm, "Caller is not $thing_frob.");
+    (sender().is($thing_frob)) || ((caller() != $foundation) && (> .perms(sender()) <));
     if (type(frob) != 'frob)
         throw(~type, "Argument not a frob.");
     contents = contents.setremove(frob);
@@ -87,7 +88,6 @@
     
     if (caller() != $located)
         throw(~perm, "Caller is not $located.");
-    .add_object_to_remote_cache(sender());
 };
 
 public method .did_leave() {
@@ -95,7 +95,6 @@
     
     if (caller() != $located)
         throw(~perm, "Caller is not $located.");
-    (| .del_object_from_remote_cache(sender()) |);
 };
 
 public method .environment() {
diff -rwu ColdCore-3.0a9.02/src/lock_frob.cdc ColdCore-3.0a10/src/lock_frob.cdc
--- ColdCore-3.0a9.02/src/lock_frob.cdc	Sat Mar 14 15:40:47 1998
+++ ColdCore-3.0a10/src/lock_frob.cdc	Sat Mar 14 15:49:08 1998
@@ -1,7 +1,7 @@
 
 new object $lock_frob: $logic_frob;
 
-var $lock_frob lock_types = [["inside", $inside_lock_frob], ["indirect", $indirect_lock_frob], ["owner", $owner_lock_frob]];
+var $lock_frob lock_types = [["inside", $inside_lock_frob], ["indirect", $indirect_lock_frob], ["owner", $owner_lock_frob], ["carry", $carry_lock_frob], ["parent", $parent_lock_frob]];
 var $lock_frob names = 0;
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
@@ -79,17 +79,16 @@
                 break;
             }
         }
-        if ((obj = (| who.match_environment(lock) |))) {
-            lock = type.new_lock(obj);
-        } else {
             switch (lock) {
-                case "any", "true", "anybody":
+            case "any", "true", "anybody", "yes":
                     lock = $true_lock_frob.new();
-                case "none", "false", "nobody":
+            case "none", "false", "nobody", "no":
                     lock = $false_lock_frob.new();
                 default:
+                if ((obj = (| who.match_environment(lock) |)))
+                    lock = type.new_lock(obj);
+                else
                     throw(~parse, ("Invalid lock tag \"" + lock) + "\"");
-            }
         }
         stack = [lock, @stack];
     
diff -rwu ColdCore-3.0a9.02/src/log.cdc ColdCore-3.0a10/src/log.cdc
--- ColdCore-3.0a9.02/src/log.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/log.cdc	Sat Mar 14 15:49:03 1998
@@ -8,7 +8,6 @@
 var $located location = $void;
 var $located obvious = 1;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core];
 var $root inited = 1;
 var $root managed = [$log];
diff -rwu ColdCore-3.0a9.02/src/login_interface.cdc ColdCore-3.0a10/src/login_interface.cdc
--- ColdCore-3.0a9.02/src/login_interface.cdc	Sat Mar 14 15:40:47 1998
+++ ColdCore-3.0a10/src/login_interface.cdc	Sat Mar 14 15:49:09 1998
@@ -1,6 +1,9 @@
 
 new object $login_interface: $connection_interface;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@who", [["@who", "", "@who", 'who_cmd, #[]]]], ["m?otd", [["m?otd", "", "m?otd", 'motd_cmd, #[]]]], ["h?elp", [["h?elp", "", "h?elp", 'help_cmd, #[]]]], ["guest|connect-guest", [["guest|connect-guest", "*", "guest|connect-guest <any>", 'connect_guest_cmd, #[[1, ['any, []]]]]]],\
   ["c?onnect",\
@@ -27,12 +30,8 @@
     passwd = args[args.length()];
     name = (args.subrange(1, (args.length()) - 1)).join();
     user = (| $user_db.search(name) |) || (> .tell_error(syn, stderr) <);
-    catch any {
         if (!(user.check_password(passwd, (.connection()).address())))
             (> .tell_error(syn, stderr) <);
-    } with {
-        (> .tell_error(syn, stderr) <);
-    }
     if ($sys.user_denied(user)) {
         .print(("Access to user " + (user.namef('ref))) + " is currently denied.");
         .print(("Contact " + ($smtp.get_email_address('admin))) + " for more information.");
@@ -74,6 +73,7 @@
     arg host, port;
     
     (> .perms(caller(), $connection) <);
+    .cache_client_init();
     .print(.motd());
 };
 
@@ -94,7 +94,7 @@
     }
     [name, pwd, email] = args;
     if ((| $user_db.search(name) |))
-        (> .tell_error(("The name '" + name) + "' is already taken.") <);
+        (> .tell_error(syn, ("The name '" + name) + "' is already taken.") <);
     if ($sys.validate_email_addresses()) {
         catch any {
             .print("Verifying Email Address..");
@@ -110,11 +110,13 @@
     } with {
         if (user)
             (| user.destroy() |);
+        (| $login_log.log(traceback().fmt_tb()) |);
         msg = ["There was a problem creating you:"];
-        msg += $parse_lib.traceback(traceback());
-        msg += ["If there is a problem contact: " + semail];
-        (| $login_log.log(traceback()) |);
-        (> .tell_error(syn, msg) <);
+    
+        //// Too verbose.
+        // msg += $parse_lib.traceback(traceback());
+        // msg += ["If there is a problem contact: " + semail];
+        (> .tell_error(syn, (msg + ["  " + ((traceback()[1])[2])]).prefix("!  ")) <);
         return;
     }
     (.connection()).change_interface(user);
@@ -130,7 +132,7 @@
     arg @args;
     var line;
     
-    line = (((($login_interface.local_cache()).to_list()).slice(2)).slice(1)).compress();
+    line = (((($login_interface.command_cache()).values()).slice(1)).slice(1)).compress();
     if (!($login_daemon.get_setting("creation-allowed", $login_daemon)))
         line = line.del("cr?eate");
     .print("Try: " + (line.to_english("", " or ")));
@@ -167,18 +167,18 @@
         } else {
             cmd = line.explode();
             cmd = [line, cmd[1], ((cmd.subrange(2)).join()) || ""];
-            c = (| $login_interface.match_in_local_cache(@cmd) |);
-            if (c && ((c[1]) == 'local)) {
+            c = (| $login_interface.match_command(@cmd) |);
+            if (c && ((c[1]) == 'command)) {
                 // screw duplicates, take the first match
                 match = (c[2])[1];
                 m = match[2];
-                i = match[5];
+                i = match[6];
                 parsed = i.keys();
                 for a in [1 .. m.length()] {
                     if (a in parsed)
                         m = m.replace(a + 2, (> $command_parser.convert_arg(cmd[2], (i[a])[1], m[a + 2], $no_one, ((i[a])[2]) ? (((i[a])[2])[1]) : $no_one, $no_one) <));
                 }
-                return (> .(match[4])(@m) <);
+                return (> .(match[5])(@m) <);
             }
             return (> .invalid_cmd(line) <);
         }
diff -rwu ColdCore-3.0a9.02/src/lost_and_found.cdc ColdCore-3.0a10/src/lost_and_found.cdc
--- ColdCore-3.0a9.02/src/lost_and_found.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/lost_and_found.cdc	Sat Mar 14 15:49:06 1998
@@ -1,6 +1,9 @@
 
 new object $lost_and_found: $in_location;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = #[];
 var $has_commands remote = #[];
diff -rwu ColdCore-3.0a9.02/src/mail_admin.cdc ColdCore-3.0a10/src/mail_admin.cdc
--- ColdCore-3.0a9.02/src/mail_admin.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/mail_admin.cdc	Sat Mar 14 15:49:07 1998
@@ -14,4 +14,10 @@
 var $root managed = [$mail_admin];
 var $root manager = $mail_admin;
 
+public method .list_is_readable_by() {
+    arg who;
+    
+    return (> pass(who) <) || ($sys.is_admin(who));
+};
+
 
diff -rwu ColdCore-3.0a9.02/src/mail_db.cdc ColdCore-3.0a10/src/mail_db.cdc
--- ColdCore-3.0a9.02/src/mail_db.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/mail_db.cdc	Sat Mar 14 15:49:10 1998
@@ -10,7 +10,7 @@
 var $root trusted = [$mail_list];
 
 root method .core_mail_db() {
-    .set_database(#[["news", $mail_list_news], ["bugs", $mail_list_bugs]]);
+    .set_database(#[["news", $mail_list_news], ["bugs", $mail_list_bugs], ["admin", $mail_admin]]);
 };
 
 public method .mail_name() {
diff -rwu ColdCore-3.0a9.02/src/mail_lib.cdc ColdCore-3.0a10/src/mail_lib.cdc
--- ColdCore-3.0a9.02/src/mail_lib.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/mail_lib.cdc	Sat Mar 14 15:49:02 1998
@@ -1,7 +1,7 @@
 
 new object $mail_lib: $libraries, $mail_root;
 
-var $mail_lib mail_system = [$mail_message, $mail_list, $mail_ui, $mail_lib];
+var $mail_lib mail_system = [$mail_message, $mail_list, $mail_ui, $mail_lib, $pop3_interface];
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'core, 'variables];
 var $root inited = 1;
diff -rwu ColdCore-3.0a9.02/src/mail_list.cdc ColdCore-3.0a10/src/mail_list.cdc
--- ColdCore-3.0a9.02/src/mail_list.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/mail_list.cdc	Sat Mar 14 15:49:04 1998
@@ -8,10 +8,12 @@
 var $mail_list readers = 1;
 var $mail_list senders = 1;
 var $root created_on = 796268969;
+var $root defined_settings = #[["inet-list", #[['parse, ['parse_inet_list_setting]]]]];
 var $root flags = ['methods, 'code, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$mail_list];
 var $root manager = $mail_list;
+var $root settings = #[["inet-list", ""]];
 var $root trusted_by = [$mail_db];
 
 protected method ._announce_new_mail() {
@@ -64,12 +66,18 @@
 };
 
 public method .del_mail() {
-    arg old_mail, @sender;
+    arg old_mail, @reason;
     
-    // what the hell am I thinking?
-    [(sender ?= sender())] = sender;
-    if (!($mail_lib.has_mail_perms(caller())))
-        throw(~perm, ((caller().namef('xref)) + " cannot remove ") + (old_mail.mail_name()));
+    [(reason ?= 0)] = reason;
+    if ((caller() == $mail_message) && (reason == 'mail_destroyed)) {
+        // being called by $mail_message.uninit_mail_message()
+    } else if (sender() == this()) {
+        // this is ok too
+    } else if (caller() == $pop3_interface) {
+        // so is this--ugh, hardcoding
+    } else if ((!(| old_mail.perms(sender()) |)) && (!(| .perms(sender()) |))) {
+        throw(~perm, ((sender().namef('ref)) + " cannot remove mail from ") + (.mail_name()));
+    }
     if (old_mail == (mail.last()))
         last_received_on = (| (mail[(mail.length()) - 1]).time() |) || 0;
     (| old_mail.del_recipient(this()) |);
@@ -104,6 +112,10 @@
     return last_received_on;
 };
 
+public method .list_is_inet() {
+    return (.get_setting("inet-list", $mail_list)) ? 1 : 0;
+};
+
 public method .list_is_readable_by() {
     arg who;
     
@@ -161,6 +161,14 @@
     // this is a hack, we shouldn't ever get bad mail if things worked right
     (> .perms(caller(), $mail_ui) <);
     mail = setremove(mail, badmail);
+};
+
+public method .parse_inet_list_setting() {
+    arg value, @args;
+    
+    if (!($sys.is_system(user())))
+        throw(~nope, "Only administrators can set internet mail list proxies.");
+    return value;
 };
 
 public method .recent_mail() {
diff -rwu ColdCore-3.0a9.02/src/mail_list_news.cdc ColdCore-3.0a10/src/mail_list_news.cdc
--- ColdCore-3.0a9.02/src/mail_list_news.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/mail_list_news.cdc	Sat Mar 14 15:49:07 1998
@@ -8,7 +8,6 @@
 var $mail_list readers = 1;
 var $mail_list senders = [];
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$mail_list_news];
diff -rwu ColdCore-3.0a9.02/src/mail_message.cdc ColdCore-3.0a10/src/mail_message.cdc
--- ColdCore-3.0a9.02/src/mail_message.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/mail_message.cdc	Sat Mar 14 15:49:04 1998
@@ -6,13 +6,14 @@
 var $mail_message header = #[];
 var $mail_message meta = 0;
 var $mail_message readers = [];
+var $mail_message rfc822_size = 0;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$mail_message];
 var $root manager = $mail_message;
 var $root quota_exempt = 1;
+var $root trusted_by = [$smtp];
 
 public method .add_reader(): nooverride  {
     arg who;
@@ -87,6 +88,26 @@
     return $ctext_frob.new_with(output);
 };
 
+protected method .format_rfc822() {
+    var out, x;
+    
+    if (!($mail_lib.has_mail_perms(caller())))
+        (> .perms(sender()) <);
+    if (meta) {
+        out = [];
+        for x in (meta)
+            out += [((x[1]) + ": ") + (x[2])];
+    } else {
+        out = ["Date: " + ($time.format("%a, %e %b %Y %T %Z", .time()))];
+        out += ["From: " + ($smtp.get_email_address(.from()))];
+        out += ["To: " + (((.recipients()).omap($smtp, 'get_email_address)).join(", "))];
+        out += [((("Message-ID: <" + (.unique_id(out))) + "@") + ($sys.server_info('server_hostname))) + ">"];
+        out += ["Subject: " + (.subject())];
+    }
+    out += [""] + (.body());
+    return out;
+};
+
 public method .from(): nooverride  {
     if (!($mail_lib.has_mail_perms(caller())))
         (> .perms(sender()) <);
@@ -148,9 +169,17 @@
     return (| header['rcpt] |) || [$no_one];
 };
 
+public method .rfc822_size() {
+    if (!($mail_lib.has_mail_perms(caller())))
+        (> .perms(sender()) <);
+    if (!rfc822_size)
+        rfc822_size = ((.format_rfc822()).to_buffer()).length();
+    return rfc822_size;
+};
+
 public method .send() {
     arg @recips;
-    var r, valid, invalid;
+    var r, valid, invalid, frominet, from;
     
     if (!($mail_lib.has_mail_perms(caller())))
         (> .perms(sender()) <);
@@ -160,6 +189,7 @@
         recips = .recipients();
     if (((recips.length()) == 1) && ((recips[1]) == $no_one))
         throw(~norcpt, "No recipients specified.");
+    frominet = sender().is($smtp_interface);
     valid = [];
     invalid = [];
     for r in (recips) {
@@ -179,14 +209,20 @@
     
     // and now to finalize the recipients
     for r in (recips) {
-        if (r.list_is_sendable_by(sender())) {
+        if ((r.list_is_inet()) && (!frominet)) {
+            from = (sender().user_info("name")) || (sender().name());
+            from += (" <" + (sender().user_info("email"))) + ">";
+            r = r.get_setting("inet-list", $mail_list);
+            $smtp.sendmail(from, r, header['subj], .body());
+            delivered++;
+        } else if (r.list_is_sendable_by(sender())) {
             r.add_mail();
             .add_recipient(r);
+            delivered++;
         } else {
             invalid += [r];
         }
     }
-    delivered = 1;
     return invalid;
 };
 
@@ -254,7 +254,7 @@
     var r;
     
     for r in (.recipients())
-        (| r.del_mail(this(), (| (.from()) || this() |)) |);
+        (| r.del_mail(this(), 'mail_destroyed) |);
     header = #[];
     readers = [];
 };
diff -rwu ColdCore-3.0a9.02/src/mail_root.cdc ColdCore-3.0a10/src/mail_root.cdc
--- ColdCore-3.0a9.02/src/mail_root.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/mail_root.cdc	Sat Mar 14 15:49:02 1998
@@ -2,7 +2,6 @@
 new object $mail_root: $misc;
 
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$mail_root];
diff -rwu ColdCore-3.0a9.02/src/mail_ui.cdc ColdCore-3.0a10/src/mail_ui.cdc
--- ColdCore-3.0a9.02/src/mail_ui.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/mail_ui.cdc	Sat Mar 14 15:49:04 1998
@@ -1,6 +1,9 @@
 
 new object $mail_ui: $mail_list, $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@sub?scribed", [["@sub?scribed", "*", "@sub?scribed <any>", 'subscribe_cmd, #[[1, ['any, []]]]]]],\
   ["@unsub?scribed",\
@@ -9,14 +12,14 @@
     [["@mail-list?s", "", "@mail-list?s", 'mail_lists_cmd, #[]]]], ["@read", [["@read", "*", "@read <any>", 'mail_read_cmd, #[[1, ['any, []]]]]]],\
   ["@remove-m?ail|@rmm?ail",\
     [["@remove-m?ail|@rmm?ail", "*", "@remove-m?ail|@rmm?ail <any>", 'mail_remove_cmd, #[[1, ['any, []]]]]]],\
-  ["@nn|@next-new",\
-    [["@nn|@next-new", "*", "@nn|@next-new <any>", 'next_new_cmd, #[[1, ['any, []]]]]]],\
   ["@mail",\
     [["@mail", "*", "@mail <any>", 'mail_on_cmd, #[[1, ['any, []]]]]]],\
   ["@reply",\
     [["@reply", "*", "@reply <any>", 'reply_cmd, #[[1, ['any, []]]]]]],\
   ["@send",\
-    [["@send", "*", "@send <any: +e?dit>", 'send_to_cmd, #[[1, ['any_opt, ["e?dit"]]]]]]]];
+    [["@send", "*", "@send <any: +e?dit>", 'send_to_cmd, #[[1, ['any_opt, ["e?dit"]]]]]]],\
+  ["@nn|@next|@next-new",\
+    [["@nn|@next|@next-new", "*", "@nn|@next|@next-new <any>", 'next_new_cmd, #[[1, ['any, []]]]]]]];
 var $has_commands shortcuts = #[];
 var $has_name name = ['prop, "Mail User Interface", "Mail User Interface"];
 var $mail_list last_letter = 0;
@@ -59,7 +62,7 @@
 
 protected method .mail_on_cmd() {
     arg cmdstr, cmd, str;
-    var args, lmail, mail, rng, start, end, line, list, len, out, m, rows, o, from;
+    var args, lmail, mail, rng, start, end, line, list, len, out, m, rows, o, from, subj;
     
     (> .perms(caller(), 'command) <);
     if ((args = match_template(str, "* on *"))) {
@@ -111,9 +114,11 @@
             list.notify_bad_mail(m);
         } else {
             from = $object_lib.get_name(m.from(), 'name);
-            if (from && (((from[1]) == "<") && ("@" in from)))
-                from = (explode(from, "@")[1]) + ">";
-            o += [$cml_lib.format_tr_tag($cml_lib.format_td_tag((m == (| (subscribed[list])[2] |)) ? "=>" : " "), $cml_lib.format_td_tag(m in lmail), $cml_lib.format_td_tag((m.has_read(this())) ? " " : "!"), $cml_lib.format_td_tag(m.subject()), $cml_lib.format_td_tag(from), $cml_lib.format_td_tag(m.lines()), $cml_lib.format_td_tag($time.format("%d-%h-%Y", m.time())))];
+            if ((args = regexp(from, "<([^>]+)>")))
+                from = explode(args[1], "@")[1];
+            subj = m.subject();
+            subj = strsed(subj, "^\[[^]]+\] *", "");
+            o += [$cml_lib.format_tr_tag($cml_lib.format_td_tag((m == (| (subscribed[list])[2] |)) ? "=>" : " "), $cml_lib.format_td_tag(m in lmail), $cml_lib.format_td_tag((m.has_read(this())) ? " " : "!"), $cml_lib.format_td_tag(subj), $cml_lib.format_td_tag(from), $cml_lib.format_td_tag(m.lines()), $cml_lib.format_td_tag($time.format("%d-%h-%Y", m.time())))];
         }
     }
     return $ctext_frob.new_with((out + [$cml_lib.format_table_tag("5%,5%,2%,50%,17%,5%,15%", o)]) + [$cml_lib.format_sep_tag()]);
@@ -242,10 +247,8 @@
     arg list;
     
     // check here so we can assume later that this error will not bite us
-    if (!(subscribed.contains(list))) {
         if (!(list.list_is_readable_by(this())))
             throw(~perm, "You cannot read mail on " + (list.mail_name()));
-    }
     
     // set the current list
     if (list != (current['list]))
@@ -257,6 +260,7 @@
     var mail, list, keys, start;
     
     (> .perms(caller(), 'command) <);
+    str = strsed(str, "^ *on +", "");
     if (str) {
         catch any
             list = (> $mail_lib.match_mail_recipient(str) <);
@@ -395,6 +399,7 @@
     out = $ctext_frob.new_with([strfmt("Message %l (%l) on %s:", loc, mail.name(), list.mail_name())]);
     .tell(out.append(mail.format(@metainfo)));
     mail.did_read();
+    if (subscribed.contains(list))
     subscribed = subscribed.add(list, [time(), mail]);
 };
 
@@ -473,13 +478,16 @@
         for list in (args.explode_english_list()) {
             catch ~listnf {
                 list = (> $mail_lib.match_mail_recipient(list) <);
+                if (list.list_is_sendable_by(this()))
                 lists += [list];
+                else
+                    .tell("You cannot send to " + (list.mail_name()));
             } with {
                 .tell(("The list \"" + list) + "\" is invalid.");
             }
         }
         if (!lists)
-            return "No lists specified.";
+            return "No (valid) lists specified.";
     } else {
         lists = [current['list]];
         .tell(("No recipient specified, using current recipient (" + ((lists[1]).mail_name())) + ")");
@@ -567,7 +567,12 @@
         .tell("---");
         return;
     }
+    catch ~listnf {
     list = $mail_lib.match_mail_recipient(str);
+    } with {
+        .tell(("The list '" + str) + "' is not a valid list.");
+        return;
+    }
     mname = $mail_lib.mail_name(list);
     if (list in (subscribed.keys()))
         return .tell(("You are already subscribed to " + mname) + ".");
diff -rwu ColdCore-3.0a9.02/src/math.cdc ColdCore-3.0a10/src/math.cdc
--- ColdCore-3.0a9.02/src/math.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/math.cdc	Sat Mar 14 15:49:25 1998
@@ -103,7 +103,7 @@
     a = atan2(coords[2], coords[1]);
     if (a < 0)
         a += pi2;
-    return [.distance(coords, origin_2d), a, coords[3]];
+    return [.distance(coords.subrange(1, 2), origin_2d), a, coords[3]];
 };
 
 public method .rectangular_polar() {
diff -rwu ColdCore-3.0a9.02/src/menu.cdc ColdCore-3.0a10/src/menu.cdc
--- ColdCore-3.0a9.02/src/menu.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/menu.cdc	Sat Mar 14 15:49:04 1998
@@ -1,6 +1,9 @@
 
 new object $menu: $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $dmi_data descriptions = #[];
 var $has_commands local = #[];
 var $has_commands remote = #[];
diff -rwu ColdCore-3.0a9.02/src/message_frob.cdc ColdCore-3.0a10/src/message_frob.cdc
--- ColdCore-3.0a9.02/src/message_frob.cdc	Sat Mar 14 15:40:48 1998
+++ ColdCore-3.0a10/src/message_frob.cdc	Sat Mar 14 15:49:08 1998
@@ -34,16 +34,33 @@
 
 public method .eval_ctext() {
     arg this, vars;
-    var key, new, temp, t, list, vars;
+    var key, new, temp, t, list, vars, okey, keys;
     
     new = .new();
     vars = vars.add('this, sender());
-    if ("general" in (this.keys()))
+    if (dict_contains(this, "general"))
         vars = vars.add("$general", "general");
-    list = this.keys();
-    for key in (list) {
+    if (vars['varkeys]) {
+        for temp in (vars['varkeys]) {
+            okey = temp[2];
+            key = ((temp[1]) + ".") + (| (vars[temp[2]]).objname() |);
+            if (dict_contains(this, key)) {
+                this = dict_add(this, temp[1], this[key]);
+                this = dict_del(this, key);
+            }
+        }
+        for key in (dict_keys(this)) {
+            okey = "$" + key;
+            if (dict_contains(vars, okey) || dict_contains(vars, key)) {
+                temp = ((this[key]).set_var('this, vars['this])).eval_ctext();
+                new = new.add_entry((| vars[okey] |) || (vars[key]), temp);
+            }
+        }
+    } else {
+        for key in (dict_keys(this)) {
         temp = ((this[key]).set_var('this, vars['this])).eval_ctext();
         new = new.add_entry((| vars["$" + key] |) || (vars[key]), temp);
+        }
     }
     return new;
 };
diff -rwu ColdCore-3.0a9.02/src/misc.cdc ColdCore-3.0a10/src/misc.cdc
--- ColdCore-3.0a9.02/src/misc.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/misc.cdc	Sat Mar 14 15:49:02 1998
@@ -2,7 +2,6 @@
 new object $misc: $core;
 
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$misc];
diff -rwu ColdCore-3.0a9.02/src/motd.cdc ColdCore-3.0a10/src/motd.cdc
--- ColdCore-3.0a9.02/src/motd.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/motd.cdc	Sat Mar 14 15:49:03 1998
@@ -1,11 +1,12 @@
 
 new object $motd: $utilities;
 
-var $motd connect_help = ["Connection HELP", "===============", "", "Connecting as a guest:    'connect-guest <name> <email>'", "              Example:    'connect-guest John Doe johnd@site.usa.com'", "", "Connecting as a user:     'connect <name> <password>'", "             Example:     'connect John Doe mypassword'", "", "Quitting (this screen):   '@quit'   or   'quit'", "", "Connected Users Listing: '@who'    or   'who'"];
+var $motd connect_help = ["Connection Help", "===============", "", "Connecting as a guest:    'guest <name> <email>'", "              Example:    'guest John Doe johndoe@domain.com'", "", "Connecting as a user:     'connect <name> <password>'", "             Example:     'connect John Doe mypassword'", "", "Quitting (this screen):   '@quit'   or   'quit'", "", "Connected Users Listing:  '@who'"];
*var $motd notes = ' ' motd.cdc
*var $motd server_name = ' ' motd.cdc
*var $motd server_title = ' ' motd.cdc
*var $motd server_url = ' ' motd.cdc
+var $motd welcome_notes = [];
 var $root created_on = 796268969;
 var $root defined_settings = #[["server-name", #[['get, ['get_server_name_setting]], ['set, ['set_server_name_setting]]]], ["server-title", #[['get, ['get_server_title_setting]], ['set, ['set_server_title_setting]]]]];
 var $root flags = ['methods, 'code, 'variables, 'core];
@@ -85,7 +86,7 @@
     
     // page += ["<p align=center><a href=\"http://" + $sys.server_info('server_hostname) + "/login/\"><b><i>Enter the Cold Dark</i></b></a>"
     page += ["<p><hr size=1 noshade width=\"50%\"><p align=center><b>"];
-    page += ["<a href=\"http://www.cold.org/Software/ColdCore/newadmin.html\">New Admins Guide</a> |", "<a href=\"http://www.cold.org/~faq/tutor/\">Tutorial</a> |", "<a href=\"http://www.cold.org/~faq/cold.html\">FAQ</a> |", "<a href=\"/bin/help?node=help_coldc\">Programmer's Manual</a> |", "<a href=\"/bin\">Gateways</a> |", "<a href=\"/bin/help\">Help System</a>"];
+    page += ["<a href=\"http://www.cold.org/Software/ColdCore/newadmin.html\">New Admins Guide</a> |", "<a href=\"/bin/describe?target=introtut_start\">Tutorial</a> |", "<a href=\"http://www.cold.org/~faq/cold.html\">FAQ</a> |", "<a href=\"/bin/help?node=help_coldc\">Programmer's Manual</a> |", "<a href=\"/bin\">Gateways</a> |", "<a href=\"/bin/help\">Help System</a>"];
     page += ["</b><p><hr size=1 noshade width=\"50%\">"];
     return page;
 };
@@ -100,6 +101,7 @@
     .rename_method('core_build_html, 'build_html);
     server_name = "ColdCore";
     server_title = "Virtual Environment Server";
+    welcome_notes = [];
 };
 
 public method .get_server_name_setting() {
@@ -160,6 +160,10 @@
     arg @args;
     
     return [("<head><title>" + server_name) + "</title></head>", "<body bgcolor=\"#000000\" text=\"#ffefef\" link=\"#b000f0\" vlink=\"#9000c0\" alink=\"#f000f0\">", "<p align=center><img src=\"http://www.cold.org/images/tCD.gif\" alt=\"The Cold Dark\"></p>", ("<h3 align=center>" + server_title) + "</h3>", "<p align=center><tt>", @$code_lib.random_quote(), "</tt></p>", "<p align=center>", @notes, "</p>", ("<p align=center>Administrators: " + ((($sys.admins()).mmap('hname)).to_english())) + "<br>", ("<a href=\"/bin/who\">Currently Connected users</a>: " + tostr($user_db.total_connected())) + "<br>", ("Server Lag: " + ($lag_watcher.lag())) + " seconds.<br>", "Driver: <b><a href=\"http://www.cold.org/Software/Genesis/\">Genesis</a></b> " + ($sys.server_info('driver_version)), ("<br>Core: <b>" + ($sys.server_info('core_version, 'long))) + "</b>", ("<p align=center><a href=\"http://" + ($sys.server_info('server_hostname))) + "/login/\"><b><i>Enter the Cold Dark</i></b></a>", "<p align=center>The Cold Dark is a Virtual Environment System.  There is no game in the Cold Dark, the purpose is to create a core which expands the physicality of a Virtual Environment.  To further explore the database, follow the <a href=\"/start.html\">Database Starting Points</a> link.</p>", "<hr>", "<p align=center>", "<a href=\"/history.html\"><b>History</b></a> |", "<a href=\"/features.html\"><b>Features</b></a> |", "<a href=\"http://www.cold.org/Intro/\"><b>Introduction</b></a> |", "<a href=\"/start.html\"><b>DB Starting Points</b></a>", "</p>"];
+};
+
+public method .welcome_notes() {
+    return welcome_notes;
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/no_one.cdc ColdCore-3.0a10/src/no_one.cdc
--- ColdCore-3.0a9.02/src/no_one.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/no_one.cdc	Sat Mar 14 15:49:05 1998
@@ -4,6 +4,9 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_name name = ['prop, "No One", "No One"];
 var $located location = $body_cave;
diff -rwu ColdCore-3.0a9.02/src/note.cdc ColdCore-3.0a10/src/note.cdc
--- ColdCore-3.0a9.02/src/note.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/note.cdc	Sat Mar 14 15:49:03 1998
@@ -4,7 +4,7 @@
 var $described prose = [];
 var $dmi_data descriptions = #[['read, #[['arg_order, ["who", "numbered"]], ['args, #[["who", [[$no_one], []]], ["numbered", [[0], [$converters, 'to_num, []]]]]], ['auth, 'none]]]];
 var $foundation edit_types = ["text"];
-var $has_commands remote = #[["erase", [["erase", "*", "erase <this>", 'erase_cmd, #[[1, ['this, []]]]], ["erase", "* on|from *", "erase <string> on|from <this>", 'erase_on_cmd, #[[1, ['any, []]], [3, ['this, []]]]]]], ["read|nread", [["read|nread", "*", "read|nread <this>", 'read_cmd, #[[1, ['this, []]]]]]], ["write", [["write", "on *", "write on <this>", 'write_cmd, #[[2, ['this, []]]]], ["write", "at * on *", "write at <string> on <this>", 'write_at_cmd, #[[2, ['any, []]], [4, ['this, []]]]]]], ["copy", [["copy", "from * to *", "copy from <this> to <any>", 'copy_cmd, #[[2, ['this, []]], [4, ['any, []]]]]]], ["@readtest", [["@readtest", "*", "@readtest <this>", 'read_cmd, #[[1, ['this, []]]]]]]];
+var $has_commands remote = #[["erase", [["erase", "*", "erase <this>", 'erase_cmd, #[[1, ['this, []]]]], ["erase", "* on|from *", "erase <string> on|from <this>", 'erase_on_cmd, #[[1, ['any, []]], [3, ['this, []]]]]]], ["read|nread", [["read|nread", "*", "read|nread <this>", 'read_cmd, #[[1, ['this, []]]]]]], ["write", [["write", "on *", "write on <this>", 'write_cmd, #[[2, ['this, []]]]], ["write", "at * on *", "write at <string> on <this>", 'write_at_cmd, #[[2, ['any, []]], [4, ['this, []]]]]]], ["copy", [["copy", "from * to *", "copy from <this> to <any>", 'copy_cmd, #[[2, ['this, []]], [4, ['any, []]]]]]]];
 var $has_name name = ['uniq, "Generic Note", "the Generic Note"];
 var $has_text text = [];
 var $located location = $void;
@@ -12,7 +12,6 @@
 var $note seperator = 0;
 var $root created_on = 796268969;
 var $root defined_settings = #[["private", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$note];
@@ -45,7 +44,7 @@
     
     // this method is outdated, needs to be rewritten.
     // it probably doesn't even work.
-    if (!(.trusts(who)))
+    if (!(.trusts(sender())))
         return sender().tell(("You cannot read the text on " + (.namef('ref))) + ".");
     dest = $parse_lib.ref(dest);
     obj = dest[3];
@@ -203,17 +203,9 @@
     if (!(.is_writable_by(sender())))
         return ("You do not have permission to write on " + (.name())) + ".";
     who = sender();
-    
-    // because I'm odd lets do this all 1 one command.
-    if ((args.length()) == 2) {
         line = "Now writing on " + (.name());
         line += ", enter \".\" to finish and \"@abort\" to abort.";
-    
-        //      who.tell(line);
         .add_text(who.read(line), who);
-    } else {
-        args = (args[1]).explode();
-    }
 };
 
 public method .write_str_cmd() {
diff -rwu ColdCore-3.0a9.02/src/nothing.cdc ColdCore-3.0a10/src/nothing.cdc
--- ColdCore-3.0a9.02/src/nothing.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/nothing.cdc	Sat Mar 14 15:49:09 1998
@@ -3,7 +3,7 @@
 
 var $described prose = [];
 var $has_name name = ['prop, "nothing whatsoever", "nothing whatsoever"];
-var $located location = $lost_and_found;
+var $located location = $void;
 var $located obvious = 1;
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
diff -rwu ColdCore-3.0a9.02/src/nowhere.cdc ColdCore-3.0a10/src/nowhere.cdc
--- ColdCore-3.0a9.02/src/nowhere.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/nowhere.cdc	Sat Mar 14 15:49:06 1998
@@ -1,10 +1,13 @@
 
 new object $nowhere: $place;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $event_handler hooks = #[];
 var $has_name name = ['prop, "Nowhere", "Nowhere"];
*var $location contents = ' ' nowhere.cdc
 var $place entrances = [];
 var $place exits = [];
 var $place realm = $realm_of_creation;
diff -rwu ColdCore-3.0a9.02/src/object_lib.cdc ColdCore-3.0a10/src/object_lib.cdc
--- ColdCore-3.0a9.02/src/object_lib.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/object_lib.cdc	Sat Mar 14 15:49:02 1998
@@ -3,6 +3,7 @@
 
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
+var $root help_node = $help_obj_object_lib;
 var $root inited = 1;
 var $root managed = [$object_lib];
 var $root manager = $object_lib;
@@ -63,8 +63,8 @@
     out += [line];
     if (obj.has_ancestor($located))
         out += ["Location: " + (.get_name(obj.location(), 'namef, ['xref]))];
-    if ((obj.is($exit)) && ((obj.source()) && (obj.dest())))
-        out += [(("Exit:     from " + ((obj.source()).namef('ref))) + " to ") + ((obj.dest()).namef('ref))];
+    if ((obj.is($path)) && (obj.ways()))
+        out += ["Paths:    " + (((obj.ways()).mmap('join, " => ")).join(", "))];
     return out;
 };
 
diff -rwu ColdCore-3.0a9.02/src/on_location.cdc ColdCore-3.0a10/src/on_location.cdc
--- ColdCore-3.0a9.02/src/on_location.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/on_location.cdc	Sat Mar 14 15:49:06 1998
@@ -1,6 +1,9 @@
 
 new object $on_location: $located_location;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = #[];
 var $has_commands remote = #[];
diff -rwu ColdCore-3.0a9.02/src/page_bin_index.cdc ColdCore-3.0a10/src/page_bin_index.cdc
--- ColdCore-3.0a9.02/src/page_bin_index.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/page_bin_index.cdc	Sat Mar 14 15:49:04 1998
@@ -1,7 +1,7 @@
 
 new object $page_bin_index: $page;
 
-var $dmi_data descriptions = #[['help, #[['args, #[["node", [[$help_coldcore], [$converters, 'to_help_node, []]]]]]]], ['describe, #[['args, #[["detail", [[""], []]], ["target", [[$the_pit], [$converters, 'to_object, []]]]]]]], ['who, #[['args, #[]]]], ['display, #[['args, #[["target", [[$root], [$converters, 'to_object, []]]], ["methods", [[0], []]], ["vars", [[0], []]], ["description", [[0], []]]]]]], ['object, #[['args, #[["target", [[$root], [$converters, 'to_object, []]]]]]]], ['method, #[['args, #[["target", [[['method, $user, $user, "say_cmd", 0]], [$converters, 'parse_ref, [$foundation, ['method]]]]], ["linenumbers", [[0], [$converters, 'to_boolean, []]]]]]]]];
+var $dmi_data descriptions = #[['help, #[['args, #[["node", [[$help_coldcore], [$converters, 'to_help_node, []]]]]]]], ['describe, #[['args, #[["detail", [[""], []]], ["target", [[$the_pit], [$converters, 'to_object, []]]]]]]], ['who, #[['args, #[]]]], ['display, #[['args, #[["target", [[$root], [$converters, 'to_object, []]]], ["methods", [[0], []]], ["vars", [[0], []]], ["helpctext", [[0], []]], ["desc", [[0], []]]]]]], ['object, #[['args, #[["target", [[$root], [$converters, 'to_object, []]]]]]]], ['method, #[['args, #[["target", [[['method, $user, $user, "say_cmd", 0]], [$converters, 'parse_ref, [$foundation, ['method]]]]], ["linenumbers", [[0], [$converters, 'to_boolean, []]]]]]]]];
 var $page_bin_index gateways = ["describe", "who", "display", "help", "object", "method"];
 var $root created_on = 863765399;
 var $root flags = ['variables, 'methods, 'code, 'core];
@@ -24,19 +24,35 @@
     arg obj, @args;
     
     args = args ? (args.join("")) : "";
-    return (((("<a href=\"/bin/display?target=" + (obj.objname())) + args) + "\">") + (obj.namef('xref))) + "</a>";
+    return (((("<a href=\"/bin/display?target=" + (obj.objname())) + args) + "\">") + ((obj.namef('xref)).to_html())) + "</a>";
 };
 
 public method ._make_method_href() {
-    arg m;
+    arg m, @options;
     
-    return ((((((("<a href=\"/bin/method?target=%%24" + ((m[1]).objname())) + ".") + (m[2])) + "()\">.") + (m[2])) + "(") + (m[3])) + ")</a>";
+    if (options) {
+        options = options.mmap('join, "=");
+        options = options.join("&");
+    }
+    return (((((((((".<a href=\"/bin/method?target=%%24" + ((m[1]).objname())) + ".") + (m[2])) + "()") + (options ? ("&" + options) : "")) + "\">") + (m[2])) + "</a>(") + (m[3])) + ")";
 };
 
 public method ._make_object_href() {
     arg obj;
     
-    return ((("<a href=\"/bin/object?target=" + (obj.objname())) + "\">") + (obj.namef('xref))) + "</a>";
+    return ((("<a href=\"/bin/object?target=" + (obj.objname())) + "\">") + ((obj.namef('xref)).to_html())) + "</a>";
+};
+
+public method ._make_show_object_href() {
+    arg msg, obj, what, change, value;
+    var show, x;
+    
+    // used by ._show_object()
+    what = dict_add(what, change, value);
+    show = map x in (what) to (((x[1]) + "=") + ((x[2]) ? "yes" : "no")).join("&");
+    if (show)
+        return ((((("[<a href=\"/bin/display?target=" + (obj.objname())) + "&") + show) + "\">") + msg) + "</a>]";
+    return ((("[<a href=\"/bin/display?target=" + (obj.objname())) + "\">") + msg) + "</a>]";
 };
 
 public method ._make_string_to_display_href() {
@@ -68,7 +84,7 @@
     var methods, types, m, t, out;
     
     types = #[];
-    for m in (obj.methods())
+    for m in ((obj.methods()).sort((obj.methods()).mmap('to_string)))
         types = types.add_elem(obj.method_access(m), [m] + (obj.method_info(m)));
     
     // hard-listing the types guarantee's their order
@@ -85,72 +101,87 @@
 
 public method ._show_object() {
     arg obj, what;
-    var out, desc;
+    var top, middle, bottom, desc, alert, nalert, line;
     
-    out = [("<h1>" + (._make_object_href(obj))) + "</h1>"];
-    out += ["<table>", ("<tr><td><b>Perms</b>:</td><td>" + (((.flags()).prefix("+")).join())) + "</td></tr>", ("<tr><td><b>Size</b>:</td><td>" + ((obj.size()).to_english())) + " bytes (on disk)</td></tr>", ("<tr><td><b>Manager</b>:</td><td>" + (._make_object_href(obj.manager()))) + "</td></tr>", ._show_header_objs(obj.writers('literal), "Writer"), ._show_header_objs(obj.parents(), "Parent")];
+    middle = (bottom = []);
+    top = [("<h1>" + (._make_object_href(obj))) + "</h1>"];
+    
+    // CORENOTE: merge this with a central location (likely $directories)
+    alert = ("<p><font size=\"+1\" color=\"#" + (($cml_color.get_color("red"))[1])) + "\"><b>";
+    nalert = "</b></font>";
+    top += ["<table>", ("<tr><td><b>Perms</b>:</td><td>" + (((.flags()).prefix("+")).join())) + "</td></tr>", ("<tr><td><b>Size</b>:</td><td>" + ((obj.size()).to_english())) + " bytes (on disk)</td></tr>", ("<tr><td><b>Manager</b>:</td><td>" + (._make_object_href(obj.manager()))) + "</td></tr>", ._show_header_objs(obj.writers('literal), "Writer"), ._show_header_objs(obj.parents(), "Parent")];
     if (obj.has_ancestor($located))
-        out += [("<tr><td><b>Location</b>:</td><td>" + (._make_object_href(obj.location()))) + "</td></tr>"];
+        top += [("<tr><td><b>Location</b>:</td><td>" + (._make_object_href(obj.location()))) + "</td></tr>"];
     if (obj.help_node())
-        out += [((("<tr><td><b>Associated Help</b>:</td><td><a href=\"/bin/help?node=" + (obj.help_node())) + "\">") + (obj.help_node())) + "</a></td></tr>"];
+        top += [((("<tr><td><b>Associated Help</b>:</td><td><a href=\"/bin/help?node=" + (obj.help_node())) + "\">") + (obj.help_node())) + "</a></td></tr>"];
+    top += ["</table><p><hr size=1 noshade><p>"];
     if (obj.has_ancestor($described)) {
-        out += ["<tr><td valign=top><b>Description</b>:</td><td>"];
-        if ('description in what) {
+        if (what['desc]) {
+            bottom += ["<p><b>Description</b>:<blockquote><pre>"];
             desc = obj.prose();
-            out += ["<pre>"];
             switch (type(desc)) {
                 case 'frob:
-                    out += desc.uncompile();
+                    for line in (desc.uncompile())
+                        bottom += line.wrap_lines(79, " ");
                 case 'list:
-                    out += desc;
+                    bottom += desc;
                 case 'string:
-                    out += [desc];
+                    bottom += [desc];
             }
-            out += ["</pre>"];
+            bottom += ["</pre></blockquote>"];
+            middle += [._make_show_object_href("Hide Description", obj, what, 'desc, 0)];
         } else {
-            out += [((("<a href=\"/bin/display?target=" + obj) + "&") + ((['description] + what).join("=yes&"))) + "=yes\">Display description</a>"];
+            middle += [._make_show_object_href("Show Description", obj, what, 'desc, 1)];
         }
-        out += ["</td></tr>"];
+        top += ["</td></tr>"];
     }
-    out += ["</table>"];
-    out += ["<p><pre>"];
-    if ('methods in what) {
+    if (what['methods]) {
         if (!(obj.has_flag('methods, this())))
-            out += ["  ** No permission to list methods **"];
+            bottom += [(alert + "** No permission to List Methods **") + nalert];
         else
-            out += ._show_methods(obj);
+            bottom += (["<p><b>Methods:</b><blockquote><pre>"] + (._show_methods(obj))) + ["</pre></blockquote>"];
+        middle += [._make_show_object_href("Hide Methods", obj, what, 'methods, 0)];
     } else {
-        out += [((((("  <h3><a href=\"/bin/display?target=" + obj) + "&") + ((['methods] + what).join("=yes&"))) + "=yes\">Display Methods on ") + obj) + "</a></h3>"];
+        middle += [._make_show_object_href("List Methods", obj, what, 'methods, 1)];
     }
-    if ('variables in what) {
+    if (what['vars]) {
         if (!(obj.has_flag('variables, this())))
-            out += ["  ** No permission to show variables **"];
+            bottom += [(alert + "** No permission to Show Variables **") + nalert];
         else
-            out += ._show_variables(obj);
+            bottom += (["<p><b>Variables:</b><blockquote><pre>"] + (._show_variables(obj))) + ["</pre></blockquote>"];
+        middle += [._make_show_object_href("Hide Variables", obj, what, 'vars, 0)];
     } else {
-        out += [((((("  <h3><a href=\"/bin/display?target=" + obj) + "&") + ((what + ['vars]).join("=yes&"))) + "=yes\">Display Variables on ") + obj) + "</a></h3>"];
+        middle += [._make_show_object_href("Show Variables", obj, what, 'vars, 1)];
     }
-    return out + ["</pre>"];
+    return (((top + middle) + ["<p>"]) + bottom) + ["<p>"];
 };
 
 public method ._show_variables() {
     arg obj;
-    var parent, out, v;
+    var parent, out, v, s, n;
     
     out = [];
     for parent in (obj.data()) {
         if (valid(parent[1])) {
-            out += [(parent[1]) + " variables:"];
+            out += [(._make_string_to_display_href(parent[1])) + " variables:"];
             if ((parent[1]).has_flag('variables, this())) {
-                for v in (parent[2])
-                    out += [(("  " + (v[1])) + ": ") + toliteral(v[2])];
+                for v in (parent[2]) {
+                    s = $data_lib.unparse_indent_html(v[2]);
+                    n = ("  " + (v[1])) + ": ";
+                    s = [s[1]] + ((s.subrange(2)).prefix(" ".pad(strlen(n))));
+                    out += [n].affix(s);
+                }
             } else {
                 out += ["  ** Permission Denied **"];
             }
         } else {
             out += [($object_lib.get_name(parent[1])) + " variables:"];
-            for v in (parent[2])
-                out += [(("  " + (v[1])) + ": ") + toliteral(v[2])];
+            for v in (parent[2]) {
+                s = $data_lib.unparse_indent_html(v[2]);
+                n = ("  " + (v[1])) + ": ";
+                s = [s[1]] + ((s.subrange(2)).prefix(" ".pad(strlen(n))));
+                out += [n].affix(s);
+            }
         }
         refresh();
     }
@@ -159,8 +190,12 @@
 
 public method .describe() {
     arg header, info, args;
-    var obj, desc, flags, detail, page, body, name;
+    var obj, desc, flags, detail, page, body, name, user;
     
+    if ($security_lib.check_userdb_with_optional(header['interface]))
+        user = (header['interface]).get_info('run_as);
+    else
+        user = $no_one;
     obj = (| args["target"] |);
     detail = (| args["detail"] |);
     if (detail) {
@@ -172,7 +207,7 @@
             body = (header['interface]).response(404, ("No such detail '" + detail) + "'");
     } else {
         name = obj.name();
-        body = obj.get_description(#[['actor, $no_one]]);
+        body = obj.get_description(#[['actor, user]]);
     }
     return [[@.build_header(header, info, args), body, @.build_footer(header, info, args)]];
 };
@@ -182,24 +217,21 @@
     var out, obj, what, user;
     
     obj = (| args["target"] |);
-    what = [];
-    if ((| args["vars"] |))
-        what = setadd(what, 'variables);
-    if ((| args["methods"] |))
-        what = setadd(what, 'methods);
-    if ((| args["description"] |))
-        what = setadd(what, 'description);
+    what = #[['desc, 0], ['methods, 0], ['vars, 0]];
     if ($security_lib.check_userdb_with_optional(header['interface]))
         user = (header['interface]).get_info('run_as);
     if (user) {
-        if (!("description" in (args['arg_list])))
-            what = ((| user.get_setting("www-show-descriptions", $www_preferences) |) || 0) ? setadd(what, 'description) : setremove(what, 'description);
-        if (!("methods" in (args['arg_list])))
-            what = ((| user.get_setting("www-show-methods", $www_preferences) |) || 0) ? setadd(what, 'methods) : setremove(what, 'methods);
-        if (!("vars" in (args['arg_list])))
-            what = ((| user.get_setting("www-show-variables", $www_preferences) |) || 0) ? setadd(what, 'variables) : setremove(what, 'variables);
+        what = dict_add(what, 'desc, (| user.get_setting("www-show-descriptions", $www_preferences) |));
+        what = dict_add(what, 'methods, (| user.get_setting("www-show-methods", $www_preferences) |));
+        what = dict_add(what, 'vars, (| user.get_setting("www-show-variables", $www_preferences) |));
     }
-    return [[@.build_header(header, info, args, obj), ._show_object(obj, what), .build_footer(header, info, args)]];
+    if ((| args["vars"] |))
+        what = dict_add(what, 'vars, (args["vars"]) == "yes");
+    if ((| args["methods"] |))
+        what = dict_add(what, 'methods, (args["methods"]) == "yes");
+    if ((| args["desc"] |))
+        what = dict_add(what, 'desc, (args["desc"]) == "yes");
+    return [(.build_header(header, info, args, obj)) + [._show_object(obj, what), .build_footer(header, info, args)]];
 };
 
 public method .generate() {
@@ -240,7 +272,7 @@
 
 public method .method() {
     arg header, info, args;
-    var ref, str_ref, name, obj, code, anc, out, line, linenumbers, user, strings, flags;
+    var ref, str_ref, name, obj, code, def, out, line, linenumbers, user, strings, flags, trace, anc, current, m, options;
     
     ref = (| args["target"] |);
     linenumbers = (| args["linenumbers"] |);
@@ -253,19 +285,35 @@
     catch any {
         name = (> tosym(ref[4]) <);
         obj = ref[3];
-        anc = obj.find_method(name);
-        if ('native in (anc.method_flags(name)))
+        def = obj.find_method(name);
+        if ('native in (def.method_flags(name)))
             code = ["This method is implemented natively within the driver."];
         else
-            code = (anc.list_method(name)).mmap('html_escape);
-        code = $code_lib.code_to_html(code, obj);
+            code = (def.list_method(name)).mmap('html_escape);
+        options = (("linenumbers" in (args['arg_list])) && linenumbers) ? [["linenumbers", "yes"]] : [];
+        code = $code_lib.code_to_html(code, obj, options);
         if (linenumbers)
             code = code.numbered_text();
         str_ref = ((obj + ".") + name) + "()";
-        out = [@.build_header(header, info, args, str_ref), (((("<center><h1>" + (._make_string_to_display_href(obj, "&methods=yes"))) + ".") + name) + "()") + "</h1></center>", "<hr size=1 noshade>"];
+        out = [@.build_header(header, info, args, str_ref), ((((("<h1>Method code for " + (._make_string_to_display_href(obj, "&methods=yes"))) + ((def != obj) ? (("&lt;" + (._make_string_to_display_href(def, "&methods=yes"))) + "&gt;") : "")) + ".") + name) + "()") + "</h1>", "<blockquote>"];
         strings = linenumbers ? ["no", "off"] : ["yes", "on"];
         out += [strfmt("[<A HREF=\"/bin/method?target=%s&linenumbers=%s\">Turn %s line numbering</A>]", str_ref, @strings)];
-        out += ["<blockquote><pre>", @code, "</pre></blockquote>"];
+        out += ["<hr size=1 noshade width=\"50%\" align=left><pre>", @code, "</pre><hr size=1 noshade width=\"50%\" align=left></blockquote>"];
+        trace = [];
+        current = def;
+        while (current) {
+            trace += [current];
+            current = (| def.find_next_method(name, current) |);
+        }
+        if ((trace.length()) > 1) {
+            out += ["<h2>Method Ancestry Override:</h2>"];
+            out += ["<blockquote><pre>"];
+            for anc in (trace) {
+                m = anc.method_info(name);
+                out += [strfmt(("%5l %4r " + (._make_string_to_display_href(anc))) + (._make_method_href([anc, name, m[1]], @options)), $object_lib.parse_method_flags(m[6]), m[4])];
+            }
+            out += ["</pre></blockquote>"];
+        }
     } with {
         switch (error()) {
             case ~type:
@@ -292,7 +340,7 @@
     out += [line + "</p>", "<table>"];
     objs = obj.children();
     if (obj) {
-        out += ["<p align=center><b>Children:</b></p>", "<center><table width=300 cellspacing=0 cellpadding=0>", "<tr><td width=25%><b>Name</b></td><td width=25%><b>Perms</b></td><td width=25%><b>Size</b></td><td width=25%><b>Manager</b></td></tr>"];
+        out += ["<p align=center><b>Children:</b></p>", "<center><table  cellspacing=0 cellpadding=0>", "<tr><td width=25%><b>Name</b></td><td width=25%><b>Perms</b></td><td width=25%><b>Size</b></td><td width=25%><b>Manager</b></td></tr>"];
         for o in (objs) {
             refresh();
             m = o.manager();
@@ -336,6 +336,7 @@
         line += realm[x];
         out += [line];
     }
+    out += ["</pre>"];
     return [out + (.build_footer(headers, info, args))];
 };
 
diff -rwu ColdCore-3.0a9.02/src/page_file_index.cdc ColdCore-3.0a10/src/page_file_index.cdc
--- ColdCore-3.0a9.02/src/page_file_index.cdc	Sat Mar 14 15:40:29 1998
+++ ColdCore-3.0a10/src/page_file_index.cdc	Sat Mar 14 15:49:04 1998
@@ -16,18 +16,8 @@
     stat = (| $file.fstat(filename) |);
     if ((!stat) || (substr(stat[1], 1, 1) == "4"))
         return [(headers['interface]).response(404, "Unable to find URL " + (info['path_info]))];
-    if ((i = (info['path_info]).rindex("."))) {
-        switch ((info['path_info]).subrange(i + 1)) {
-            case "txt":
-                (headers['interface]).set_ctype("text/plain");
-            case "gif":
-                (headers['interface]).set_ctype("image/gif");
-            case "jpg":
-                (headers['interface]).set_ctype("image/jpeg");
-            case "html":
-                (headers['interface]).set_ctype("text/html");
-        }
-    }
+    i = (info['path_info]).rindex(".");
+    (headers['interface]).set_ctype($mime_lib.mime_type((info['path_info]).subrange(i + 1)));
     (headers['interface]).respond_with_file(stat, filename);
     return 0;
 };
diff -rwu ColdCore-3.0a9.02/src/parse_lib.cdc ColdCore-3.0a10/src/parse_lib.cdc
--- ColdCore-3.0a9.02/src/parse_lib.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/parse_lib.cdc	Sat Mar 14 15:49:02 1998
@@ -285,10 +285,13 @@
     arg str;
     var rx;
     
-    if ((rx = regexp(str, "^my$|^my +(.+)?")))
+    if ((rx = regexp(str, "^my$|^my +(.+)?"))) {
         return ["me", (| rx[1] |) || ""];
-    else if ((rx = regexp(str, "^([^ ]+s'|[^ ]+'s) *(.+)?")))
+    } else if ((rx = regexp(str, "^([^ ]+s'|[^ ]+'s) *(.+)?"))) {
+        if (listlen(rx) == 1)
+            return 0;
         return [substr(rx[1], 1, strlen(rx[1]) - 2), rx[2]];
+    }
     return 0;
 };
 
@@ -320,8 +323,7 @@
     else
         match = [me, 'match_environment, []];
     if (str == ".") {
-        // shortcut
-        obj = (> (match[1]).(match[2])("", @match[3]) <);
+        obj = (> (match[1]).(match[2])(".") <);
         return ['object, obj, obj, 0, 0];
     }
     if ((reg = regexp(str, "^(.*)<([^>]*)>(.*)$"))) {
@@ -334,7 +334,7 @@
         type = reg[2];
         if (((type.length()) > 1) && (((type[1]) == ".") && (!obj))) {
             type = type.subrange(2);
-            obj = (> (match[1]).(match[2])("", @match[3]) <);
+            obj = (> (match[1]).(match[2])(".") <);
         } else {
             obj = obj ? (> (match[1]).(match[2])(obj, @match[3]) <) : me;
         }
diff -rwu ColdCore-3.0a9.02/src/physical.cdc ColdCore-3.0a10/src/physical.cdc
--- ColdCore-3.0a9.02/src/physical.cdc	Sat Mar 14 15:40:28 1998
+++ ColdCore-3.0a10/src/physical.cdc	Sat Mar 14 15:49:03 1998
@@ -12,6 +12,13 @@
 var $root manager = $physical;
 var $root trusted = [];
 
+public method .check_location() {
+    arg sender;
+    
+    if ((.location()) != (sender.location()))
+        throw(~location, "It's too far away!");
+};
+
 public method .is_visible_to() {
     arg whom;
     
diff -rwu ColdCore-3.0a9.02/src/place.cdc ColdCore-3.0a10/src/place.cdc
--- ColdCore-3.0a9.02/src/place.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/place.cdc	Sat Mar 14 15:49:06 1998
@@ -1,6 +1,9 @@
 
 new object $place: $location, $realm_settings;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $foundation defined_msgs = #[["housekeeper", #[['branches, ["general"]]]], ["connect", #[['branches, ["general"]]]], ["disconnect", #[['branches, ["general"]]]]];
 var $foundation msgs = #[["housekeeper", #[["general", <$ctext_frob, [["The housekeeper arrives and takes ", <$generator, ["actor", [], [], 'gen_actor]>, "'s body away."], #[]]>]]], ["connect", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " wakes up."], #[['this, $place]]]>]]], ["disconnect", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " falls asleep."], #[['this, $place]]]>]]]];
@@ -13,27 +16,36 @@
 var $place realm = $realm_of_creation;
 var $root created_on = 796268969;
 var $root defined_settings = #[["public-home", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["realm", #[['get, ['realm]], ['set, ['set_setting_realm]], ['parse, ['parse_realm_setting]], ['clear, ['clear_realm_setting]]]], ["darkness", #[['get, ['darkness]], ['set, ['set_darkness]], ['parse, ['is_type, 'integer]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$place];
 var $root manager = $place;
 var $root settings = #[["public-home", 0], ["map-position", 0], ["propagate", 0]];
 
+public method .add_as_entrance() {
+    arg path;
+    
+    entrances = setadd(entrances, path);
+};
+
 public method .attach_exit() {
     arg type, exit;
     
-    if (!(caller().is($exit)))
+    if (!(caller().is($path)))
         throw(~perm, "Caller is not an exit.");
     if (type == 'source) {
         .add_object_to_remote_cache(exit);
         (| (.realm()).add_exit_to(exit.dest()) |);
         exits = setadd(exits, exit);
     } else {
-        entrances = setadd(entrances, exit.source());
+        entrances = setadd(entrances, exit);
     }
 };
 
+public method .clear_entrances() {
+    entrances = [];
+};
+
 public method .clear_realm_setting() {
     arg name;
     
@@ -56,20 +68,25 @@
     var e;
     
     e = .visible_exits();
-    return ((> pass(f) <) + (.format_contents(f))) + (.format_exits(e, f));
+    return ((> pass(f) <) + [.format_contents(f)]) + (.format_exits(e, f));
 };
 
 public method .detach_exit() {
     arg type, exit;
     
-    if (!(caller().is($exit)))
+    if (!(caller().is($path)))
         throw(~perm, "Caller is not an exit.");
-    if (type == 'source) {
-        .del_object_from_remote_cache(exit);
+    if (type == 'source)
         exits = setremove(exits, exit);
-    } else {
-        entrances = setremove(entrances, exit.source());
-    }
+    else
+        entrances = setremove(entrances, exit);
+};
+
+public method .did_arrive() {
+    arg place;
+    
+    pass(place);
+    .cache_client_init();
 };
 
 public method .did_connect() {
@@ -124,7 +141,7 @@
                 objects += [obj];
         }
     }
-    output = [];
+    output = $ctext_frob.new_with([]);
     br = $cml_lib.format_br_tag();
     if (users) {
         formatteduser = map item in (users) to ($cml_lib.format_obj_tag('look, item, item.namef('nactivity)));
@@ -132,7 +149,7 @@
         line = $ctext_frob.new_with(formatteduser);
     
         //output += [br, line];
-        output += [line];
+        output = output.append(line);
     }
     if (objects) {
         formattedobj = map item in (objects) to ($cml_lib.format_obj_tag('look, item, item.name()));
@@ -140,7 +157,7 @@
         line = $ctext_frob.new_with(formattedobj);
     
         //output += [br, line];
-        output += [line];
+        output = output.append(line);
     }
     return output;
 };
@@ -157,29 +174,29 @@
         case 'brief:
             if (!exits)
                 return [];
-            return [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(map exit in (exits) to ($cml_lib.format_obj_tag('look, exit, exit.name(), 'exit)))])];
+            return [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(map exit in (exits) to ($cml_lib.format_obj_tag('look, exit, exit.path_name(this()), 'exit))), $cml_lib.format_br_tag()])];
         case 'templates:
             output = [];
             for e in (exits) {
                 if (e.name_templates())
-                    output += [$cml_lib.format_obj_tag('look, e, (((e.name()) + " (") + ((e.name_templates()).to_english())) + ")", 'exit)];
+                    output += [$cml_lib.format_obj_tag('look, e, (((e.path_name(this())) + " (") + ((e.name_templates()).to_english())) + ")", 'exit)];
                 else
-                    output += [$cml_lib.format_obj_tag('look, e, e.name(), 'exit)];
+                    output += [$cml_lib.format_obj_tag('look, e, e.path_name(this()), 'exit)];
             }
-            return output ? [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(output)])] : [];
+            return output ? [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(output), $cml_lib.format_br_tag()])] : [];
         case 'long:
             output = [];
             for e in (exits)
-                output += [(("  " + (e.name())) + " to ") + ((e.dest()).name())];
+                output += [(("  " + (e.path_name(this()))) + " to ") + ((e.dest(this())).name())];
             return output ? (["Visible Exits: "] + (output.lcolumnize(actor.linelen()))) : [];
         case 'verbose:
             output = [];
             for e in (exits) {
                 if (e.name_templates())
-                    line = (((e.name()) + " (") + ((e.name_templates()).to_english("no templates"))) + ")";
+                    line = (((e.path_name(this())) + " (") + ((e.name_templates()).to_english("no templates"))) + ")";
                 else
-                    line = e.name();
-                output += [(("  " + line) + " to ") + ((e.dest()).name())];
+                    line = e.path_name(this());
+                output += [(("  " + line) + " to ") + ((e.dest(this())).name())];
             }
             return output ? ["Visible Exits: ", @output.lcolumnize(actor.linelen())] : [];
     }
@@ -239,6 +256,47 @@
     return output;
 };
 
+public method .old_format_exits() {
+    arg exits, flags;
+    var output, e, exits, line, actor, how, exit;
+    
+    actor = flags['actor];
+    how = (flags['actor]).get_setting("exit-style", $user);
+    switch (how) {
+        case 'none:
+            return [];
+        case 'brief:
+            if (!exits)
+                return [];
+            return [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(map exit in (exits) to ($cml_lib.format_obj_tag('look, exit, exit.name(), 'exit)))])];
+        case 'templates:
+            output = [];
+            for e in (exits) {
+                if (e.name_templates())
+                    output += [$cml_lib.format_obj_tag('look, e, (((e.name()) + " (") + ((e.name_templates()).to_english())) + ")", 'exit)];
+                else
+                    output += [$cml_lib.format_obj_tag('look, e, e.name(), 'exit)];
+            }
+            return output ? [$ctext_frob.new_with(["Visible Exits: ", $cml_lib.generate_english_tag(output)])] : [];
+        case 'long:
+            output = [];
+            for e in (exits)
+                output += [(("  " + (e.name())) + " to ") + ((e.dest()).name())];
+            return output ? (["Visible Exits: "] + (output.lcolumnize(actor.linelen()))) : [];
+        case 'verbose:
+            output = [];
+            for e in (exits) {
+                if (e.name_templates())
+                    line = (((e.name()) + " (") + ((e.name_templates()).to_english("no templates"))) + ")";
+                else
+                    line = e.name();
+                output += [(("  " + line) + " to ") + ((e.dest()).name())];
+            }
+            return output ? ["Visible Exits: ", @output.lcolumnize(actor.linelen())] : [];
+    }
+    return [];
+};
+
 public method .parse_realm_setting() {
     arg value, @args;
     var realm;
@@ -284,18 +284,10 @@
     [(ctype ?= "text/plain")] = ctype;
     switch (ctype) {
         case "text/html":
-            return (((.hname()) + " (") + ((| realm.realm_name() |) || "<unknown>")) + ")";
+            return (((.hname()) + " (") + ((| (realm.realm_name()).to_html() |) || "&lt;unknown&gt;")) + ")";
         default:
             return (((.name()) + " (") + ((| realm.realm_name() |) || "<unknown>")) + ")";
     }
-};
-
-public method .rehash_caches() {
-    var exit;
-    
-    (> pass() <);
-    for exit in (exits)
-        (> .add_object_to_remote_cache(exit) <);
 };
 
 public method .set_darkness() {
diff -rwu ColdCore-3.0a9.02/src/place_lib.cdc ColdCore-3.0a10/src/place_lib.cdc
--- ColdCore-3.0a9.02/src/place_lib.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/place_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -4,7 +4,8 @@
 var $place_lib build_hints = #[[1, <$ctext_frob, [["This is the do-it-all system for building places. At any time you can enter \"@abort\" to abort building. To turn off these hints \"@set experienced\" in your regular command environment.", <$format, ["hr", [], [], 'do_hr]>], #[['this, $place_lib]]]>], [2, <$ctext_frob, [["The specified destination does not exist, therefore a new one will be created with the name you specified.", <$format, ["hr", [], [], 'do_hr]>], #[['this, $place_lib]]]>], [3, <$ctext_frob, [["Name aliases can be specified on the same line as the name. This is done by seperating them from the name with commas. Any number of aliases can be specified in this manner (such as \"Name, alias, alias, alias\"). Names types can be defined by appending ", <$format, ["tt", [], ["+type"], 'do_tt]>, ", where ", <$format, ["tt", [], ["type"], 'do_tt]>, " is one of ", <$format, ["tt", [], ["proper"], 'do_tt]>, ", ", <$format, ["tt", [], ["unique"], 'do_tt]>, " or ", <$format, ["tt", [], ["normal"], 'do_tt]>, ". Not specifying a type defaults to ", <$format, ["tt", [], ["normal"], 'do_tt]>, ".", <$format, ["hr", [], [], 'do_hr]>], #[['this, $place_lib]]]>], [4, <$ctext_frob, [["Realms are used to keep locations in relation with each other. To get a list of commonly known realms type ", <$format, ["tt", [], ["@realms"], 'do_tt]>, ".", <$format, ["hr", [], [], 'do_hr]>], #[['this, $place_lib]]]>], [5, <$ctext_frob, [["Coordinates are used to define a basic relation between locations by pointing in the direction each place is. They use the radial/azimuth system. More help on Coordinates can be found in help under ", <$format, ["tt", [], ["places"], 'do_tt]>, ". For now it may be easier to use a coordinate shorcut (such as ", <$format, ["tt", [], ["up"], 'do_tt]>, "). To get a list of coordinate shortcuts type ", <$format, ["tt", [], ["@shortcuts"], 'do_tt]>, " now. Note: coordinates are automatically inverted for return exits (so if you specify ", <$format, ["tt", [], ["down"], 'do_tt]>, " the return exit will use the coordinates of ", <$format, ["tt", [], ["up"], 'do_tt]>, ").", <$format, ["hr", [], [], 'do_hr]>], #[['this, $place_lib]]]>]];
 var $place_lib coordinate_shortcuts = #[["n?orth", [0, 0]], ["s?outh", [180, 0]], ["e?ast", [90, 0]], ["w?est", [270, 0]], ["ne|northeast", [45, 0]], ["se|southeast", [135, 0]], ["nw|northwest", [225, 0]], ["sw|southwest", [315, 0]], ["d?own", [-1, -90]], ["u?p", [-1, 90]]];
 var $place_lib default_distance = 250;
-var $place_lib default_exit = $exit_frob;
+var $place_lib default_exit = $path;
+var $place_lib default_path = $path;
 var $place_lib default_place = $place;
 var $place_lib known_realms = [$realm_of_creation];
 var $place_lib opposite_directions = #[["n?orth", 2], ["s?outh", 1], ["e?ast", 4], ["w?est", 3], ["northeast|ne", 7], ["southeast|se", 8], ["southwest|sw", 5], ["northwest|nw", 6], ["up", 10], ["d?own", 9]];
diff -rwu ColdCore-3.0a9.02/src/plain_format.cdc ColdCore-3.0a10/src/plain_format.cdc
--- ColdCore-3.0a9.02/src/plain_format.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/plain_format.cdc	Sat Mar 14 15:49:03 1998
@@ -357,6 +357,7 @@
             done = done && ((rinfo[j]) || (i >= listlen(rcont[j])));
         }
         i++;
+        s = s.trim('right);
         s += "\n";
     }
     for j in [1 .. rinfo.length()]
diff -rwu ColdCore-3.0a9.02/src/player.cdc ColdCore-3.0a10/src/player.cdc
--- ColdCore-3.0a9.02/src/player.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/player.cdc	Sat Mar 14 15:49:05 1998
@@ -4,6 +4,9 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = \
   #[["@sheet|@score", [["@sheet|@score", "*", "@sheet|@score <any>", 'sheet_cmd, #[[1, ['any, []]]]]]],\
@@ -24,8 +24,7 @@
 var $player character = 0;
 var $player characters = 0;
 var $root created_on = 809926794;
-var $root fertile = 1;
-var $root flags = ['core, 'methods, 'code, 'command_cache, 'variables];
+var $root flags = ['core, 'methods, 'code, 'variables, 'general_cache];
 var $root inited = 1;
 var $root managed = [$player];
 var $root manager = $player;
diff -rwu ColdCore-3.0a9.02/src/programmer.cdc ColdCore-3.0a10/src/programmer.cdc
--- ColdCore-3.0a9.02/src/programmer.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/programmer.cdc	Sat Mar 14 15:49:05 1998
@@ -4,6 +4,9 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = \
   #[["@id", [["@id", "*", "@id <any>", 'id_cmd, #[[1, ['any, []]]]]]],\
@@ -68,9 +71,7 @@
   ["@descend?ants",\
     [["@descend?ants", "*", "@descend?ants <objref:+a?ll +r?edundant +o?nly +n?ot>", 'descendants_cmd, #[[1, ['objref_opt, ["a?ll", "r?edundant", "o?nly", "n?ot"]]]]]]],\
   ["@d?isplay",\
-    [["@d?isplay", "*", "@d?isplay <objref: +c?hop +g?enerations>", 'display_cmd, #[[1, ['objref_opt, ["c?hop", "g?enerations"]]]]]]],\
-  ["@chman?age",\
-    [["@chman?age", "*", "@chman?age <any>", 'chmanage_cmd, #[[1, ['any, []]]]]]]];
+    [["@d?isplay", "*", "@d?isplay <objref: +c?hop +g?enerations>", 'display_cmd, #[[1, ['objref_opt, ["c?hop", "g?enerations"]]]]]]]];
 var $has_commands shortcuts = #[[";*", ['eval_cmd, ["eval", 1]]]];
 var $has_name name = ['prop, "Generic Programmer", "Generic Programmer"];
 var $located location = $body_cave;
@@ -90,7 +91,7 @@
 var $programmer eval_tick_offset = 0;
 var $root created_on = 796268969;
 var $root defined_settings = #[["match-with", #[['parse, ['parse_match_with]]]], ["match-default", #[]], ["@program-options", #[]], ["@list-options", #[]]];
-var $root flags = ['methods, 'code, 'core, 'command_cache, 'variables];
+var $root flags = ['methods, 'code, 'core, 'variables, 'general_cache];
 var $root inited = 1;
 var $root managed = [$programmer];
 var $root manager = $programmer;
@@ -188,13 +189,38 @@
     [object, method] = client_data;
     sender = this();
     code += [(("// $#Edited: " + ($time.format("%d %h %y %H:%M"))) + " ") + sender];
-    errors = object.add_method(code, method);
+    errors = (> object.add_method(code, method) <);
     if (errors)
         return ['failure, errors];
     warns = (> $code_lib.verify_code(code, method, 1) <);
     return ['success, [warns + ["Method compiled."]]];
 };
 
+protected method ._edit_variable_callback() {
+    arg data, client_data;
+    var name, def, errs, obj, variable;
+    
+    (> .perms(caller(), $editor_reference) <);
+    [obj, variable] = client_data;
+    data = ([variable + " = "] + data) + [";"];
+    name = tosym("tmp_edit_" + time());
+    def = (obj + ",") + variable;
+    catch any {
+        if ((errs = obj.add_method(data, name, 'evalonly)))
+            return ['failure, [(("Unable to store " + def) + ": ") + (errs.join())]];
+    } with {
+        return ['failure, []];
+    }
+    catch any {
+        data = obj.(name)();
+    } with {
+        (| obj.del_method(name) |);
+        return ['failure, [(("Unable to store " + def) + ": ") + ((traceback()[1])[2])]];
+    }
+    (| obj.del_method(name) |);
+    return ['success, [["Variable stored."]]];
+};
+
 protected method ._list_method() {
     arg obj, method, @args;
     var code, opt, flags, f;
@@ -308,21 +334,6 @@
     return out;
 };
 
-private method ._which_cmd() {
-    arg partial, parent, type, more;
-    var p, cmds, cmd, def, matches;
-    
-    cmds = (| parent.(type)() |) || #[];
-    matches = [];
-    for def in (cmds.keys()) {
-        for cmd in (cmds[def]) {
-            if (partial in ((cmd[3]).strip("?")))
-                matches += [[more, cmd[3], cmd[4]]];
-        }
-    }
-    return matches;
-};
-
 protected method .add_command_cmd() {
     arg cmdstr, cmd, str;
     var ref, t, args, objref;
@@ -459,25 +470,6 @@
     .tell("---");
 };
 
-protected method .chmanage_cmd() {
-    arg cmdstr, cmd, args;
-    var obj, manager;
-    
-    (> .perms(caller(), 'command) <);
-    args = (args.replace(" to ", " ")).explode();
-    if ((!args) || ((args.length()) != 2))
-        (> .tell_error(cmd + " <object> [to] <user>") <);
-    obj = .match_env_nice(args[1]);
-    manager = .match_env_nice(args[2]);
-    if ((!(manager.is($user))) && (!(.is($admin))))
-        return "Sorry you can only set users as managers.";
-    catch any
-        (> obj.change_manager(manager) <);
-    with
-        return (traceback()[1])[2];
-    return ((("Manager on " + (obj.namef('xref))) + " changed to ") + (manager.namef('xref))) + ".";
-};
-
 protected method .chmod_cmd() {
     arg cmdstr, cmd, args;
     var a, ts, t, opts, b, objs, o, precedence, ref, flags, match, m;
@@ -519,7 +511,7 @@
     // ok, now handle it, keep precedence for their own sake
     for o in (objs) {
         catch any {
-            ref = (| $parse_lib.ref(o) |);
+            ref = $parse_lib.ref(o);
         } with {
             .tell((traceback()[1])[2]);
             continue;
@@ -962,9 +954,9 @@
         line += ", redundant entries";
     .tell("-- " + line);
     if (only)
-        .tell("-- only objects with flag(s): +" + (only.join(" +")));
+        .tell("-- only objects with flag(s): +" + (only.join(" AND +")));
     if (not)
-        .tell("-- not objects with flag(s): +" + (not.join(" +")));
+        .tell("-- not objects with flag(s): +" + (not.join(" OR +")));
     return [obj.format_descendants("", #[], 0, max, only, not, r), "--"];
 };
 
@@ -1004,16 +996,24 @@
     else
         f = args[4];
     match = .get_setting("match-with", $programmer);
+    catch ~perm {
     if ('method in what)
         out += ._display_methods(obj, obj.list_methods(gen, def, f, match), chop, f);
+    } with {
+        out += ["  ** No permission to list methods **"];
+    }
+    catch ~perm {
     if ('variable in what)
         out += ._display_variables(obj, obj.variable_info(gen, def, f, match), chop, f);
+    } with {
+        out += ["  ** No permission to show variables **"];
+    }
     return out + ["---"];
 };
 
 protected method .dump_cmd() {
     arg cmdstr, cmd, args;
-    var opts, objs, o, i, tdfmt, meths, vars, header;
+    var opts, objs, o, obj, i, tdfmt, meths, vars, header, bad_objs;
     
     (> .perms(caller(), 'command) <);
     opts = args[2];
@@ -1026,18 +1026,29 @@
     if ((!meths) && (!vars))
         return "Perhaps you will want to dump methods and/or vars next time?";
     objs = [];
+    bad_objs = [];
     for o in (args) {
-        catch any
-            objs += [(> .match_env_nice(o) <)];
-        with
+        catch any {
+            obj = (> .match_env_nice(o) <);
+            if (type(obj) == 'frob)
+                bad_objs += [o];
+            else
+                objs += [obj];
+        } with {
             .tell((traceback()[1])[2]);
     }
-    if (!objs)
+    }
+    if (!objs) {
+        if ((bad_objs.length()) > 0)
+            .tell("NOTE:  these objects were frobs and couldn't be @dump'd: " + (bad_objs.to_english()));
         return "Dump nothing?";
+    }
     if (tdfmt)
         .dump_fmt_textdump(objs, meths, vars, header);
     else
         .dump_fmt_commands(objs, meths, vars, header);
+    if ((bad_objs.length()) > 0)
+        .tell("NOTE:  these objects were frobs and couldn't be @dump'd: " + (bad_objs.to_english()));
 };
 
 protected method .dump_fmt_commands() {
@@ -1050,12 +1061,17 @@
     for obj in (objs) {
         refresh();
         if (header) {
+            if (obj == $root) {
+                pars = $root;
+                line = "";
+            } else {
             pars = obj.parents();
             line = (((((((";var p, new; if(!(| valid(" + obj) + ") |)) ") + "{ new = ") + (pars[1])) + ".spawn();") + " new.set_objname('") + (obj.objname())) + ");}";
             if (listlen(pars) > 1)
                 line += (" obj.chparents(" + join(pars, ",")) + ");";
             .tell(line);
         }
+        }
         if (vars) {
             catch ~perm {
                 data = (> obj.data() <);
@@ -1174,7 +1190,7 @@
         return "Eval offset " + line;
     }
     
-    // format it, use heuristics
+    // format it
     if (match_begin(str, "var") && (reg = regexp(str, "var ([^;]+)"))) {
         str = strsed(str, "var ([^;]+);", "");
         str = ((((("var " + vars) + ", ") + (reg.join(","))) + ";") + v) + str;
@@ -1184,10 +1200,13 @@
         str = strsed(str, " *;* *$", "");
         str = ((((("var " + vars) + ";") + v) + "return (> ") + str) + " <);";
     }
-    if (debug)
-        [times, result, debug] = (> .evaluate(str, obj, definer, debug) <);
-    else
-        [times, result] = (> .evaluate(str, obj, definer) <);
+    if (debug) {
+        result = (> .evaluate(str, obj, definer, debug) <);
+        debug = (| result[3] |);
+    } else {
+        result = (> .evaluate(str, obj, definer, debug) <);
+    }
+    [times, result] = result;
     
     // Display the errors, or the result.
     if ((result[1]) == 'errors) {
@@ -1315,12 +1334,12 @@
     flags = obj.method_flags(method);
     switch (format) {
         case 'textdump:
-            return ([(((((((obj.method_access(method)) + " method ") + obj) + ".") + method) + "()") + (flags ? (": " + (flags.join(", "))) : "")) + " {"] + (code.prefix("    "))) + ["};"];
+            return (([(((((((obj.method_access(method)) + " method ") + obj) + ".") + method) + "()") + (flags ? (": " + (flags.join(", "))) : "")) + " {"] + (code.prefix("    "))) + ["};"]) + ((obj.credit()).prefix("// "));
         case 'numbered:
             code = code.numbered_text();
-            return ([(((((("-- " + (obj.method_access(method))) + " method ") + obj) + ".") + method) + "()") + (flags ? (": " + (flags.join(", "))) : "")] + code) + ["--"];
+            return (([(((((("-- " + (obj.method_access(method))) + " method ") + obj) + ".") + method) + "()") + (flags ? (": " + (flags.join(", "))) : "")] + code) + ["--"]) + ((obj.credit()).prefix("// "));
         default:
-            return ([$object_lib.format_method_header(obj, method, opt, flags, obj.method_access(method))] + (code.prefix("  "))) + ["."];
+            return (([$object_lib.format_method_header(obj, method, opt, flags, obj.method_access(method))] + (code.prefix("  "))) + ["."]) + ((obj.credit()).prefix("// "));
     }
 };
 
@@ -1645,7 +1664,7 @@
         m = .get_setting("match-with", $programmer);
         methods = [];
         for method in (def.methods()) {
-            if (tostr(method).(m)(pattern))
+            if (tostr(method).(m)(pattern) != 0)
                 methods += [method];
         }
         if (!methods)
@@ -1699,7 +1718,7 @@
         code = def.list_method(meth);
     with
         return (traceback()[1])[2];
-    return ([(((((("#$# edit name: " + def) + ".") + meth) + " upload: @program ") + def) + ".") + meth] + (code.prefix("    "))) + ["."];
+    return .ptell(([(((((("#$# edit name: " + def) + ".") + meth) + " upload: @program ") + def) + ".") + meth] + (code.prefix("    "))) + ["."], #[['nomod, 1]]);
 };
 
 protected method .managed_cmd() {
@@ -1753,10 +1772,12 @@
     // move|copy a method or var
     src = args[1];
     args = args[2];
+    if (!args)
+        return ((("You have to " + how) + " ") + ($parse_lib.buildref(@src))) + " somewhere.";
     if ((args[1]) == "to")
         args = delete(args, 1);
     if (!args)
-        return ((("You have to " + how) + " ") + (what.namef('ref))) + " somewhere.";
+        return ((("You have to " + how) + " ") + ($parse_lib.buildref(@src))) + " somewhere.";
     catch ~objnf
         dest = (> $parse_lib.ref(args.join()) <);
     with
@@ -1790,11 +1811,31 @@
 
 protected method .new_editor_session() {
     arg ref, opts, type;
-    var def, code, name;
+    var def, code, name, errs, data;
     
     switch (ref[1]) {
         case 'variable:
-            (> .tell_error("", "Variable editor not yet implemented.") <);
+            code = ("return " + (ref[4])) + ";";
+            def = ((ref[2]) + ",") + (ref[4]);
+            name = (ref[4]).to_symbol();
+            if (!(name in ((ref[2]).variables())))
+                return [("The object variable " + def) + " does not exist.", ("You have to '@add-variable " + def) + "' before you can edit it."];
+            name = tosym("tmp_edit_" + time());
+            catch any {
+                if ((errs = (ref[2]).add_method([code], name, 'evalonly)))
+                    return [(("Unable to retrieve " + def) + ": ") + (errs.join())];
+            } with {
+                return [(("Unable to retrieve " + def) + ": ") + (errs.join())];
+            }
+            catch any {
+                data = (ref[2]).(name)();
+            } with {
+                (| (ref[2]).del_method(name) |);
+                return [(("Unable to retrieve " + def) + ": ") + ((traceback()[1])[2])];
+            }
+            (| (ref[2]).del_method(name) |);
+            data = $data_lib.unparse_indent(data);
+            (> .invoke_editor(this(), '_edit_variable_callback, data, [ref[2], ref[4]]) <);
         case 'method:
             def = (| (ref[2]).find_method(tosym(ref[4])) |);
             if (!def) {
@@ -2047,7 +2088,7 @@
         code += [ed];
     catch any {
         if ((errs = (ref[3]).add_method(code, meth)))
-            return errs;
+            return errs.prefix("** ");
         (> (ref[3]).set_method_flags(meth, fl) <);
         (> (ref[3]).set_method_access(meth, acc) <);
         if ((line = (> $code_lib.verify_code(code, meth, warn) <)))
@@ -2058,24 +2099,6 @@
     }
 };
 
-protected method .rehash_cmd() {
-    arg cmdstr, cmd;
-    var c, o, p;
-    
-    (> .perms(caller(), 'command) <);
-    .tell("Rehashing your commands...");
-    .purge_caches();
-    for p in (parents())
-        p.cache_uninit();
-    for cmd in (.local_commands()) {
-        for c in (cmd[2])
-            .add_to_local_cache(c[1]);
-    }
-    for p in (parents())
-        p.cache_init();
-    .tell("Done.");
-};
-
 protected method .show_cmd() {
     arg cmdstr, com, args;
     var show, match, i, chop, f, obj, out;
@@ -2247,40 +2247,69 @@
 
 protected method .which_cmd() {
     arg cmdstr, command, str;
-    var m, c, l, t, p, s, cmds, def, out, dname, line, lcache, rcache;
+    var l, out, d, m, p, c, cache, cmds, cmd, matches, def;
     
     (> .perms(caller(), 'command) <);
     if (!str)
         return ("Syntax: `" + command) + " <partial or full template>`";
-    m = #[];
-    t = (str.explode())[1];
-    for p in (.ancestors()) {
-        if (p == $has_commands)
-            break;
-        cmds = ._which_cmd(str, p, 'local_commands, " ");
-        cmds += ._which_cmd(str, p, 'remote_commands, "*");
-        if (cmds)
-            m = m.add(p, cmds);
+    str = str.word(1);
+    
+    // local commands
+    matches = #[];
+    for p in ([this()] + (.command_modules())) {
+        for def in (p.all_local_commands()) {
+            for cmd in (def[2]) {
+                for c in ((cmd[1]).explode("|")) {
+                    if (str in (c.strip("?"))) {
+                        for m in (cmd[2])
+                            matches = matches.setadd_elem(m[3], [def[1], m[4], 'local]);
     }
-    if (!m)
+                }
+                refresh();
+            }
+            refresh();
+        }
+        refresh();
+    }
+    
+    // remote commands
+    cache = #[];
+    for cmds in (dict_values($remote_cache.command_cache())) {
+        for def in (cmds) {
+            if (!dict_contains(cache, def[1])) {
+                for c in ((def[1]).explode("|")) {
+                    if (str in (c.strip("?"))) {
+                        for m in ((def[2]).command_info('remote, def[1]))
+                            matches = matches.setadd_elem(m[3], [def[2], m[4], 'remote]);
+                    }
+                }
+                cache = dict_add(cache, def[1], 1);
+            }
+        }
+        refresh();
+    }
+    
+    // return results
+    if (!matches)
         return ("No commands found matching the template \"" + str) + "\".";
-    l = (.linelen()) / 2;
-    out = [("Commands matching the template \"" + str) + "\":"];
-    lcache = .local_cache();
-    rcache = .remote_cache();
-    for def in (m) {
-        dname = (" " + (def[1])) + ".";
-        for c in (def[2]) {
-            line = ((((c[1]) + ((c[2]).pad(l))) + dname) + tostr(c[3])) + "()";
-            s = (((((c[2]).explode())[1]).strip("?")).explode("|"))[1];
-            if ((| lcache[s] |) || (| rcache[s] |))
-                line = " " + line;
+    l = ((.linelen()) - 2) / 2;
+    out = [("Commands matching the template \"" + str) + "\":  (* == remote command)"];
+    for c in (matches) {
+        cmd = ("\"" + (c[1])) + "\"";
+        for def in (c[2]) {
+            d = ((def[1]) + ".") + (def[2]);
+            if ((def[2]) == 'remote)
+                p = "* ";
+            else
+                p = "  ";
+            if (strlen(cmd) > (l - 2))
+                out += [p + cmd, "          " + d];
             else
-                line = "!" + line;
-            out += [line];
+                out += [(p + strfmt("%*l ", l, cmd)) + d];
         }
+        refresh();
     }
-    return out;
+    return out + ["---"];
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/pueblo_format.cdc ColdCore-3.0a10/src/pueblo_format.cdc
--- ColdCore-3.0a9.02/src/pueblo_format.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/pueblo_format.cdc	Sat Mar 14 15:49:03 1998
@@ -7,10 +7,50 @@
 var $root managed = [$pueblo_format];
 var $root manager = $pueblo_format;
 
+public method ._do_dd() {
+    arg vars, flags, args;
+    
+    return .eval_indented(args, vars, (| vars['dl_ind] |) || 4);
+};
+
+public method ._do_dl() {
+    arg vars, flags, args;
+    var out, token, c, cm, ind, mem;
+    
+    c = (| vars['columned] |) || 0;
+    cm = (| flags.getkey("columned") |) || 0;
+    ind = (| toint(flags.getkey("ind")) |) || 4;
+    vars = vars.add('columned, cm);
+    if (dict_contains(vars, 'dl_ind))
+        mem = vars['dl_ind];
+    vars = dict_add(vars, 'dl_ind, ind);
+    [args, vars] = ._eval_ctext(args, vars);
+    if (mem)
+        vars = dict_add(vars, 'dl_ind, mem);
+    else
+        vars = dict_del(vars, 'dl_ind);
+    if (c)
+        vars = vars.add('columned, c);
+    else if (vars.contains('columned))
+        vars = vars.del('columned);
+    return [args + "\n", vars];
+};
+
+public method ._do_dt() {
+    arg vars, flags, args;
+    
+    vars = vars.add('header, "");
+    [args, vars] = ._eval_ctext(args, vars);
+    if ((| vars['columned] |))
+        return ["\n  ", vars.add('header, pad("  " + args, 25 + ((args.length()) - ((.strip_tags(args)).length()))))];
+    else
+        return [("\n  " + args) + "\n", vars.add('header, "")];
+};
+
 public method .do_dd() {
     arg vars, flags, args;
     
-    return $plain_format.do_dd(vars, flags, args);
+    return ._do_dd(vars, flags, args);
 };
 
 public method .do_detail() {
@@ -24,14 +64,14 @@
 public method .do_dl() {
     arg vars, flags, args;
     
-    [args, vars] = $plain_format.do_dl(vars, flags, args);
+    [args, vars] = ._do_dl(vars, flags, args);
     return [("<pre>" + args) + "</pre>", vars];
 };
 
 public method .do_dt() {
     arg vars, flags, args;
     
-    return $plain_format.do_dt(vars, flags, args);
+    return ._do_dt(vars, flags, args);
 };
 
 public method .do_img() {
@@ -74,7 +114,7 @@
             if (options) {
                 switch (options) {
                     case 'exit:
-                        output = [((("<a xch_cmd=\"go " + (object.name('noarticle))) + "\">") + name) + "</a>", vars];
+                        output = [((("<a xch_cmd=\"" + (object.name('noarticle))) + "\">") + name) + "</a>", vars];
                     case 'contained:
                         output = [((((("<a xch_cmd=\"look " + ((object.location()).name('noarticle))) + "'s ") + (object.name('noarticle))) + "\">") + name) + "</a>", vars];
                 }
@@ -110,6 +150,16 @@
     return $plain_format.do_tr(vars, flags, args);
 };
 
+public method .eval_indented() {
+    arg args, vars, i, @w;
+    var width, indent;
+    
+    width = vars['width];
+    vars = vars.add('width, (| w[1] |) || (width - i));
+    [args, vars] = ._eval_ctext(args, vars);
+    return [.rewrap_lines(vars, (vars['header]) + args, pad("", i)), vars.add('width, width)];
+};
+
 public method .format() {
     arg data, vars;
     var str, len, line, out, base, port;
@@ -127,6 +127,24 @@
 
 public method .init() {
     return #[['width, 78]];
+};
+
+public method .rewrap_lines() {
+    arg vars, str, prefix;
+    var s, p, n, firstline;
+    
+    s = [];
+    n = (vars['width]) + (prefix.length());
+    for str in (str.explode("\n", 1))
+        s += str.wrap_lines(n, prefix, 1);
+    return s.join("\n");
+};
+
+public method .strip_tags() {
+    arg string;
+    var mode, chunk;
+    
+    return map chunk in (string.global_regexp("<[^<>]+>")) to ((mode = !mode) ? chunk : "").join("");
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/realm.cdc ColdCore-3.0a10/src/realm.cdc
--- ColdCore-3.0a9.02/src/realm.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/realm.cdc	Sat Mar 14 15:49:07 1998
@@ -2,7 +2,7 @@
 new object $realm: $realm_settings, $event_handler, $has_name;
 
 var $foundation defined_msgs = #[["night", #[['branches, ["general"]]]], ["predawn", #[['branches, ["general"]]]], ["dawn", #[['branches, ["general"]]]], ["morning", #[['branches, ["general"]]]], ["noon", #[['branches, ["general"]]]], ["afternoon", #[['branches, ["general"]]]], ["sunset", #[['branches, ["general"]]]], ["evening", #[['branches, ["general"]]]]];
-var $foundation msgs = #[];
+var $foundation msgs = #[["afternoon", #[["general", <$ctext_frob, [["The sun descends toward the horizon."], #[]]>]]], ["dawn", #[["general", <$ctext_frob, [["The first rays of sun announce the new day."], #[]]>]]], ["evening", #[["general", <$ctext_frob, [["The sky darkens as sunlight fades."], #[]]>]]], ["morning", #[["general", <$ctext_frob, [["The temperature begins to rise as the morning sun lifts above the horizon."], #[]]>]]], ["night", #[["general", <$ctext_frob, [["The sky darkens to night."], #[]]>]]], ["noon", #[["general", <$ctext_frob, [["The sun peaks in the sky."], #[]]>]]], ["predawn", #[["general", <$ctext_frob, [["The sky to the east brightens."], #[]]>]]], ["sunset", #[["general", <$ctext_frob, [["The sun slowly dips beneath the horizon."], #[]]>]]]];
 var $has_name name = ['uniq, "Realm", "the Realm"];
 var $realm last_daytime = 0;
 var $realm links = #[];
@@ -14,7 +14,7 @@
 var $root inited = 1;
 var $root managed = [$realm];
 var $root manager = $realm;
-var $root settings = #[["weather-time", [$weather_1, "spring", $climate_taobh_thiar, 0, $world_time, 0]], ["propagate", 0], ["map-position", 0]];
+var $root settings = #[["weather-time", [$weather_nice, "spring", $climate_creation, 0, $world_time, 0]], ["propagate", 0], ["map-position", 0]];
 var $root trusted_by = [$world];
 
 public method ._check_links() {
@@ -40,6 +40,18 @@
         (| ((.parents())[1])._check_links(@propagate_check) |);
 };
 
+protected method ._get_msg() {
+    arg name, definer;
+    var msg;
+    
+    if ((msg = (| .get_local_msg(name) |)))
+        return dict_union(definer.get_default_msg(name), msg);
+    else if (this() == definer)
+        return definer.get_default_msg(name);
+    else
+        return (parents()[1])._get_msg(name, definer);
+};
+
 public method .add_exit_to() {
     arg dest;
     
@@ -55,6 +67,12 @@
     }
 };
 
+public method .add_local() {
+    arg new_dest;
+    
+    local = $list.setadd(.local(), new_dest);
+};
+
 public method .advance_weather() {
     arg ticked;
     var d, new;
@@ -73,8 +91,9 @@
     new = ((d[5]).daytime(d[6], (d[3]).daylength(d[2])))[2];
     if (new != last_daytime) {
         last_daytime = new;
-        .realm_announce(.eval_message(tostr(new), $realm, .ctext_variables()));
+        .realm_announce(new);
     }
+    d = d.replace(2, (d[5]).current_season());
 };
 
 public method .cleanup_local() {
@@ -115,12 +115,12 @@
 
 public method .get_msg() {
     arg name, definer;
-    var t;
+    var get;
     
-    if (!(t = pass(name, definer)))
-        return ((.parents())[1]).get_msg(name, definer);
-    else
-        return t;
+    // can only inherit if they use the default 'getter
+    if ((get = (| definer.get_msg_attr(name, 'getter) |)))
+        return .(get)(name, definer);
+    return ._get_msg(name, definer);
 };
 
 public method .init_realm() {
diff -rwu ColdCore-3.0a9.02/src/realm_base_eval.cdc ColdCore-3.0a10/src/realm_base_eval.cdc
--- ColdCore-3.0a9.02/src/realm_base_eval.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/realm_base_eval.cdc	Sat Mar 14 15:49:03 1998
@@ -12,7 +12,7 @@
     var v, i, len, n;
     
     v = vars['daytime];
-    return [((vars['time]) == 'post) ? (v[3]) : [v[3]], vars];
+    return [[tostr(v[3])], vars];
 };
 
 public method .gen_hour() {
@@ -20,7 +20,7 @@
     var v, i, len, n;
     
     v = vars['daytime];
-    return [((vars['time]) == 'post) ? tostr(v[1]) : [tostr(v[1])], vars];
+    return [[tostr(v[1])], vars];
 };
 
 public method .gen_light() {
@@ -28,7 +28,7 @@
     var v, i, len, n;
     
     v = vars['daytime];
-    return [((vars['time]) == 'post) ? (v[2]) : [v[2]], vars];
+    return [[tostr(v[2])], vars];
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/reaper.cdc ColdCore-3.0a10/src/reaper.cdc
--- ColdCore-3.0a9.02/src/reaper.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/reaper.cdc	Sat Mar 14 15:49:05 1998
@@ -5,6 +5,9 @@
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = <$ctext_frob, [["A dark billowing cape covers his luminous and forboding form."], #[]]>;
 var $has_name name = ['prop, "Reaper", "Reaper"];
 var $located location = $body_cave;
diff -rwu ColdCore-3.0a9.02/src/registry.cdc ColdCore-3.0a10/src/registry.cdc
--- ColdCore-3.0a9.02/src/registry.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/registry.cdc	Sat Mar 14 15:49:10 1998
@@ -10,7 +10,6 @@
 var $registry stripped = 0;
 var $registry stripped_characters = "";
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$registry];
diff -rwu ColdCore-3.0a9.02/src/robot.cdc ColdCore-3.0a10/src/robot.cdc
--- ColdCore-3.0a9.02/src/robot.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/robot.cdc	Sat Mar 14 15:49:04 1998
@@ -2,19 +2,21 @@
 new object $robot: $body, $has_reactions;
 
 var $body body_parts = #[];
+var $command_cache modules = [];
 var $described prose = <$ctext_frob, [["A generic automated robot object."], #[['this, $robot]]]>;
-var $has_commands remote = #[["@reactions", [["@reactions", "*", "@reactions <this>", 'reactions_cmd, #[[1, ['this, []]]]]]]];
+var $has_commands remote = #[["@reactions", [["@reactions", "*", "@reactions <this>", 'reactions_cmd, #[[1, ['this, []]]]]]], ["@del-r?eaction", [["@del-r?eaction", "* from|on *", "@del-r?eaction <number> from|on <this>", 'del_reaction_cmd, #[[1, ['number, []]], [3, ['this, []]]]]]], ["@add-r?eaction", [["@add-r?eaction", "* to * on *", "@add-r?eaction <any> to <any> on <this>", 'add_reaction_cmd, #[[1, ['any, []]], [3, ['any, []]], [5, ['this, []]]]]]], ["@deactivate-r?eaction|@dr", [["@deactivate-r?eaction|@dr", "* on *", "@deactivate-r?eaction|@dr <number> on <this>", 'deactivate_reaction_cmd, #[[1, ['number, []]], [3, ['this, []]]]]]], ["@activate-r?eaction|@ar", [["@activate-r?eaction|@ar", "* on *", "@activate-r?eaction|@ar <number> on <this>", 'activate_reaction_cmd, #[[1, ['number, []]], [3, ['this, []]]]]]]];
 var $has_name name = ['uniq, "Robot", "the Robot"];
 var $located location = $lost_and_found;
 var $located obvious = 1;
*var $location contents = ' ' robot.cdc
 var $robot active = 0;
 var $robot active_ids = 0;
-var $robot last_id = 0;
+var $robot last_id = 1;
 var $robot match_types = #[["regexp", ['regexp, "rex"]], ["pattern", ['match_pattern, "pat"]], ["template", ['match_template, "tmp"]]];
-var $robot reactions = 0;
+var $robot reactions = #[];
 var $root created_on = 796268969;
-var $root flags = ['methods, 'code, 'variables, 'core, 'fertile, 'command_cache];
+var $root flags = ['methods, 'code, 'variables, 'core, 'fertile, 'general_cache];
+var $root help_node = $help_obj_robot;
 var $root inited = 1;
 var $root managed = [$robot];
 var $root manager = $robot;
@@ -24,6 +26,8 @@
     arg id;
     var ra, key, e, inserted, chance, times;
     
+    // Make sure the sender is a writer, added by Sean 20 Feb 1998
+    (> .perms(sender()) <);
     if ((!reactions) || (!dict_contains(reactions, id)))
         throw(~noreaction, ("No reaction with id '" + id) + "'.");
     if (!active)
@@ -48,6 +52,23 @@
         ra += [[id, [chance, times]]];
     active = dict_add(active, key, hash e in (ra) to (e));
     active_ids = dict_add(active_ids || #[], id, key);
+    
+    // Hook into 'social; .hook_into_events() will not add twice, so we're safe
+    // Added by Sean 20 Feb 1998
+    // Only hook if the type is not 'tell
+    if (key != 'tell)
+        .hook_into_event('social);
+};
+
+public method .activate_reaction_cmd() {
+    arg cmdstr, cmd, int, prep, this;
+    
+    (> .perms(sender()) <);
+    catch ~noreaction
+        .activate_reaction(int);
+    with
+        return (traceback()[1])[2];
+    sender().tell(((("Reaction " + int) + " activated on ") + (.name())) + ".");
 };
 
 public method .active() {
@@ -58,6 +79,9 @@
     arg @args;
     var r, id;
     
+    // Make sure the sender is a writer, added by Sean
+    (> .perms(sender()) <);
+    
     // make sure it doesn't already exist..
     for r in (reactions || #[]) {
         if (((r[2])[2]) == (args[2])) {
@@ -69,6 +93,73 @@
     reactions = dict_add(reactions || #[], ++last_id, args);
 };
 
+public method .add_reaction_cmd() {
+    arg cmdstr, cmd, args, prep1, hook, prep2, me;
+    var t, type, method, times, chance, min, max, hook_args, i, opts, o, def_opts;
+    
+    (> .perms(caller(), 'command) <);
+    hook = (| hook.to_symbol() |);
+    if (!hook)
+        throw(~args, "Invalid hook");
+    def_opts = [["t?ype", 1], ["m?ethod", 1], ["ti?mes", 1], ["c?hance", 1], ["min", 1], ["max", 1], ["a?rgs", 1]];
+    [t, opts] = $parse_lib.getopt(args, def_opts);
+    t = t.join();
+    
+    // Set the defaults
+    method = 'regexp;
+    type = 'tosay;
+    chance = 100;
+    times = -1;
+    hook_args = [];
+    min = 0;
+    max = 0;
+    catch any {
+        // check the options!
+        o = opts.slice(1);
+        if ((i = "m?ethod" in o)) {
+            method = (| ((opts[i])[4]).to_symbol() |);
+            if (!method)
+                throw(~args, "Invalid method specified with +m?ethod=??");
+        }
+        if ((i = "t?ype" in o)) {
+            type = (| ((opts[i])[4]).to_symbol() |);
+            if (!type)
+                throw(~args, "No type specified with +t?ype=??");
+        }
+        if ((i = "c?hance" in o)) {
+            chance = (| ((opts[i])[4]).to_number() |);
+            if ((chance < 1) || (chance > 100))
+                throw(~args, "+c?hance=?? requires an integer between 1 and 100");
+        }
+        if ((i = "ti?mes" in o)) {
+            times = (| ((opts[i])[4]).to_number() |);
+            if ((!times) || (times < (-1)))
+                throw(~args, "+ti?mes=?? requires an integer >= -1");
+        }
+        if ((i = "min" in o)) {
+            min = (| ((opts[i])[4]).to_number() |);
+            if ((!min) || (min < 0))
+                throw(~args, "+min=?? requires an integer >= 0");
+        }
+        if ((i = "max" in o)) {
+            max = (| ((opts[i])[4]).to_number() |);
+            if ((!max) || (max < 0))
+                throw(~args, "+max=?? requires an integer >= 0");
+        }
+        if ((i = "a?rgs" in o)) {
+            hook_args = (> fromliteral((opt[i])[4]) <);
+            if (type(hook_args) != 'list)
+                hook_args = [hook_args];
+        }
+        if (max < min)
+            max = min;
+        (> .add_reaction(method, t, type, chance, times, [hook, hook_args], min, max) <);
+    } with {
+        return (traceback()[1])[2];
+    }
+    return strfmt("Reaction %d added to %s.%s() with match method %s, type %s, chance %d, times %d, args %s, min_delay %s, and max_delay %s.", t, toliteral(this()), hook, toliteral(method), toliteral(type), chance, times, toliteral(hook_args), min, max);
+};
+
 private method .check_reaction_args() {
     arg method, template, type, chance, times, hook, min, max;
     
@@ -185,17 +276,48 @@
     }
 };
 
+public method .connected() {
+    // to simulate a user
+    return .active();
+};
+
+public method .connected_time() {
+    arg @args;
+    
+    [(args ?= 'dhms)] = args;
+    if (!(.active()))
+        return "Inactive";
+    switch (args) {
+        case 'seconds:
+            return 0;
+        default:
+            return "";
+    }
+};
+
 public method .deactivate_reaction() {
     arg id;
     
+    // sender should be a writer.  added by Sean 20 Feb 1998
+    (> .perms(sender()) <);
     if (active_ids && dict_contains(active_ids, id)) {
         .remove_active(active_ids[id], id);
         active_ids = dict_del(active_ids, id);
-        if (!active_ids)
+        if (!active_ids) {
             clear_var('active_ids);
+            .unhook_from_event('social);
+        }
     }
 };
 
+public method .deactivate_reaction_cmd() {
+    arg cmdstr, cmd, int, prep, this;
+    
+    (> .perms(sender()) <);
+    .deactivate_reaction(int);
+    sender().tell(((("Reaction " + int) + " deactivated on ") + (.name())) + ".");
+};
+
 public method .del_reaction() {
     arg id;
     var key;
@@ -203,11 +325,18 @@
     (> .perms(sender()) <);
     if (!dict_contains(reactions, id))
         return;
-    key = (reactions[id])[3];
-    (| .remove_active(key, id) |);
+    (| .deactivate_reaction(id) |);
     reactions = reactions.del(id);
 };
 
+public method .del_reaction_cmd() {
+    arg cmdstr, cmd, id, @args;
+    
+    (> .perms(caller(), 'command) <);
+    .del_reaction(id);
+    return ((("Removed reaction " + id) + " from ") + (.name())) + ".";
+};
+
 protected method .do_reaction(): forked  {
     arg str, match, id, sender;
     var method, args, min, max, time, range;
@@ -237,6 +366,12 @@
         .check_reactions(args[2], args[3], args[1]);
 };
 
+public method .idle_time() {
+    arg @args;
+    
+    return "";
+};
+
 public method .match_type() {
     arg type;
     
@@ -253,13 +388,13 @@
     (> .perms(sender()) <);
     catch any {
         parse = $command_parser.parse(this(), line, $null_parser);
-        (> .handle_parser_result(@parse) <);
+        (> .handle_parser_result(line, @parse) <);
     } with {
         if (error() == ~stop) {
             if ((traceback()[1])[2])
                 .tell((traceback()[1])[2]);
         } else if ((.manager()) != this()) {
-            (.manager()).tell_traceback(traceback(), line, 0, error());
+            (.manager()).tell(traceback().fmt_tb());
         }
     }
 };
@@ -312,6 +312,7 @@
 };
 
 public method .startup() {
+    (> .perms(sender(), 'trusts) <);
     .hook_events('startup);
 };
 
diff -rwu ColdCore-3.0a9.02/src/root.cdc ColdCore-3.0a10/src/root.cdc
--- ColdCore-3.0a9.02/src/root.cdc	Sat Mar 14 15:40:23 1998
+++ ColdCore-3.0a10/src/root.cdc	Sat Mar 14 15:49:01 1998
@@ -3,8 +3,8 @@
 
*var $root child_index = ' ' root.cdc
 var $root created_on = 0;
+var $root credit = 0;
 var $root defined_settings = #[["help-node", #[['get, ['help_node]], ['set, ['set_help_node_setting]], ['parse, ['parse_help_node_setting]], ['format, ['format_help_node_setting]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'core, 'variables];
 var $root help_node = 0;
 var $root inited = 0;
@@ -12,6 +12,7 @@
 var $root manager = $root;
 var $root quota = 75000;
 var $root quota_exempt = 0;
+var $root semaphores = 0;
 var $root settings = 0;
 var $root trusted = [];
 var $root trusted_by = 0;
@@ -167,7 +168,7 @@
     var l, m, line, errs;
     
     (> .perms(sender()) <);
-    if (evalonly && (caller() == $programmer))
+    if (evalonly && (caller() in [$root, $sys, $programmer]))
         (> $sys.touch('lockok) <);
     else
         (> $sys.touch() <);
@@ -588,6 +589,10 @@
     return created_on;
 };
 
+public method .credit() {
+    return credit || [];
+};
+
 public method .data(): nooverride  {
     arg @parent;
     var par, data, out;
@@ -614,7 +619,7 @@
 
 public method .debug() {
     arg @stuff;
-    var x, line, mngr, meth, stack;
+    var x, line, mngr, meth, stack, out;
     
     stack = stack();
     meth = (| (((stack[2])[3]) + "() line ") + ((stack[2])[4]) |);
@@ -622,9 +627,10 @@
         line = ((("DEBUG " + sender()) + ".") + meth) + ": ";
     else
         line = ("DEBUG " + sender()) + ": ";
+    out = [line];
     for x in (stuff)
-        line = (line + " ") + toliteral(x);
-    (| (.manager()).tell(line) |);
+        out += ($data_lib.unparse_indent(x)).prefix("DEBUG    ");
+    (| (.manager()).tell(out) |);
 };
 
 public method .define_setting(): nooverride  {
@@ -839,24 +845,24 @@
     arg ind, done, depth, max, yes, no, above;
     var c, anc, list, id, perms, f, show, myflags;
     
-    show = 1;
     myflags = .flags();
+    show = 1;
     if (yes) {
         for f in (yes) {
-            if (f in myflags) {
-                show = 1;
+            if (!(f in myflags)) {
+                show = 0;
                 break;
-            } else {
-                show = 0.0;
             }
         }
     }
-    for f in (.flags()) {
-        if (no && (f in no)) {
+    if (no) {
+        for f in (myflags) {
+            if (f in no) {
             show = 0;
             break;
         }
     }
+    }
     if (show) {
         id = ((ind + this()) + " ") + ($object_lib.see_perms(this()));
         for anc in (dict_keys(done)) {
@@ -1220,6 +1226,10 @@
     return kids.keys();
 };
 
+public method .nop() {
+    // the no operation, operation, woowoo
+};
+
 public method .objname(): nooverride  {
     return (> objname() <);
 };
@@ -1273,6 +1283,50 @@
     }
 };
 
+public method .poll_semaphore(): nooverride  {
+    arg type;
+    var t;
+    
+    if (!(caller().has_flag('core)))
+        return;
+    while (1) {
+        if (!semaphores) {
+            semaphores = #[[type, task_id()]];
+            return;
+        }
+        if ((type((| (t = semaphores[type]) |)) == 'error) || (!(t in tasks()))) {
+            semaphores = dict_add(semaphores, type, task_id());
+            return;
+        }
+        pause();
+        pause();
+        pause();
+    }
+};
+
+public method .poll_semaphores() {
+    arg type, @s;
+    var i;
+    
+    if (!(caller().has_flag('core)))
+        return;
+    refresh();
+    while (find i in (s) where (i.query_semaphore(type))) {
+        pause();
+        pause();
+        pause();
+    }
+    for i in (s)
+        i.poll_semaphore(type);
+};
+
+public method .query_semaphore() {
+    arg type;
+    var t;
+    
+    return (type((| (t = semaphores[type]) |)) != 'error) && ((t in tasks()) && (t != task_id()));
+};
+
 public method .quota(): nooverride  {
     return quota;
 };
@@ -1300,6 +1354,15 @@
     return (.quota_byte_usage()) < (.quota());
 };
 
+public method .release_semaphore(): nooverride  {
+    arg type;
+    
+    if ((| (semaphores[type]) == task_id() |))
+        semaphores = dict_del(semaphores, type);
+    if (!semaphores)
+        clear_var('semaphores);
+};
+
 public method .rename_method() {
     arg now, new;
     
@@ -1308,6 +1371,18 @@
     return (> rename_method(now, new) <);
 };
 
+public method .set_credit() {
+    arg newcopy;
+    var x;
+    
+    (> .perms(sender(), 'manager) <);
+    if (newcopy == 0)
+        return (| clear_var('credit) |);
+    if ((type(newcopy) != 'list) || find x in (newcopy) where (type(x) != 'string))
+        throw(~type, "You must submit a list of strings for the credit.");
+    credit = newcopy;
+};
+
 public method .set_flags(): nooverride  {
     arg new_flags;
     
@@ -1317,9 +1392,10 @@
         throw(~invflags, "Flags must be submitted as a list of symbols.");
     if ((!new_flags) && flags)
         return clear_var('flags);
-    if (('core in new_flags) && (!($sys.is_system(sender()))))
+    if ((('core in new_flags) && (!('core in flags))) && (!($sys.is_system(sender()))))
         throw(~perm, "Only system objects can set the 'core flag.");
-    ('fertile in new_flags) && (> .perms(sender(), 'manager) <);
+    if (('fertile in new_flags) && (!('fertile in flags)))
+        (> .perms(sender(), 'manager) <);
     flags = new_flags;
 };
 
@@ -1343,13 +1419,17 @@
 
 public method .set_method_flags(): nooverride  {
     arg method, flags;
+    var current;
     
     if (!(.is_writable_by(sender())))
         throw(~perm, (sender() + " cannot write to ") + this());
     (> $sys.touch() <);
-    if (('locked in flags) && (!($sys.is_system(sender()))))
+    current = method_flags(method);
+    if ((('locked in flags) && (!('locked in current))) && (!($sys.is_system(sender()))))
         throw(~perm, "Only administrators can set the locked method flag.");
-    return (> set_method_flags(method, flags) <);
+    if ((('nooverride in flags) && (!('nooverride in current))) && (!($sys.is_system(sender()))))
+        throw(~perm, "Only administrators can set the nooverride method flag.");
+    return set_method_flags(method, flags);
 };
 
 public method .set_objname() {
@@ -1469,10 +1469,6 @@
     (> .will_spawn(sender()) <);
     suffix = (> .get_obj_suffix(@suffix) <);
     return $sys.spawn_sender(suffix, sender());
-};
-
-public method .test_method() {
-    return "from root";
 };
 
 public method .trusted(): nooverride  {
diff -rwu ColdCore-3.0a9.02/src/scheduler.cdc ColdCore-3.0a10/src/scheduler.cdc
--- ColdCore-3.0a9.02/src/scheduler.cdc	Sat Mar 14 15:40:25 1998
+++ ColdCore-3.0a10/src/scheduler.cdc	Sat Mar 14 15:49:03 1998
@@ -2,7 +2,7 @@
 new object $scheduler: $utilities;
 
 var $root created_on = 810294797;
-var $root flags = ['methods, 'code, 'variables, 'core];
+var $root flags = ['methods, 'code, 'core];
 var $root inited = 1;
 var $root managed = [$scheduler];
 var $root manager = $scheduler;
@@ -150,11 +150,11 @@
     t = time();
     while (task_queue && (t > ((task_queue[1])[2]))) {
         task = task_queue[1];
+        .remove_first_task();
         catch any
             (> (task[4]).as_this_run(task[4], task[6], task[8]) <);
         with
             (| ((task[4]).manager()).tell_traceback(traceback()) |);
-        .remove_first_task();
     }
     
     // call sub schedulers 
diff -rwu ColdCore-3.0a9.02/src/settings_ui.cdc ColdCore-3.0a10/src/settings_ui.cdc
--- ColdCore-3.0a9.02/src/settings_ui.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/settings_ui.cdc	Sat Mar 14 15:49:07 1998
@@ -1,6 +1,9 @@
 
 new object $settings_ui: $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = \
   #[["@set?tings", [["@set?tings", "on|from *", "@set?tings on|from <object reference>", 'settings_on_cmd, #[[2, ['objref, []]]]]]],\
   ["@set|@setting?s",\
diff -rwu ColdCore-3.0a9.02/src/smtp.cdc ColdCore-3.0a10/src/smtp.cdc
--- ColdCore-3.0a9.02/src/smtp.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/smtp.cdc	Sat Mar 14 15:49:07 1998
@@ -2,12 +2,13 @@
 new object $smtp: $network;
 
 var $root created_on = 845213524;
-var $root defined_settings = #[["aliases", #[['get, ['get_aliases_setting]], ['set, ['set_aliases_setting]], ['parse, ['parse_itemlist, 'parse_alias_setting]], ['format, ['fmt_aliases_setting]]]], ["hosts", #[['get, ['get_hosts_setting]], ['set, ['set_hosts_setting]], ['parse, ['parse_itemlist, 'parse_host_setting]], ['format, ['format_itemlist]]]], ["maildrop", #[['get, ['get_maildrop_setting]], ['set, ['set_maildrop_setting]], ['parse, ['parse_maildrop_setting]], ['format, ['fmt_maildrop_setting]]]]];
+var $root defined_settings = #[["aliases", #[['get, ['get_aliases_setting]], ['set, ['set_aliases_setting]], ['parse, ['parse_itemlist, 'parse_alias_setting]], ['format, ['fmt_aliases_setting]]]], ["hosts", #[['get, ['get_hosts_setting]], ['set, ['set_hosts_setting]], ['parse, ['parse_itemlist, 'parse_host_setting]], ['format, ['format_itemlist]]]], ["maildrop", #[['get, ['get_maildrop_setting]], ['set, ['set_maildrop_setting]], ['parse, ['parse_maildrop_setting]], ['format, ['fmt_maildrop_setting]]]], ["cold-relay-recip", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
 var $root managed = [$smtp];
 var $root manager = $smtp;
-var $root trusted = [$login_interface, $user_info];
+var $root settings = #[["cold-relay-recip", 0]];
+var $root trusted = [$login_interface, $user_info, $mail_message];
 var $root trusted_by = [$outbound_connection];
 var $smtp hosts = 0;
 var $smtp mail_aliases = #[["postmaster", $mail_postmaster], ["admin", $mail_admin], ["abuse", $mail_admin], ["MAILER-DAEMON", $mail_postmaster]];
@@ -49,7 +50,7 @@
     [code, line] = lines[1];
     if (code == 250)
         return lines.slice(2);
-    throw(~error, (lines.slice(2)).join(), code);
+    throw(~error, (("ERROR FROM " + maildrop) + ": ") + ((lines.slice(2)).join()), code);
 };
 
 protected method .QUIT() {
@@ -163,6 +164,7 @@
 root method .core_smtp(): nooverride  {
     maildrop = "127.0.0.1";
     hosts = 0;
+    .set_setting("cold-relay-recip", $smtp, "no");
 };
 
 public method .del_mail_alias() {
@@ -194,7 +196,10 @@
         mailname = strsed(mailname, "^[*~]", "");
     } else {
         mailname = strsub(recip.mail_name(), "*", "list-");
+        if (.get_setting("cold-relay-recip", $smtp))
         mailname = strsub(mailname, "~", "user-");
+        else
+            mailname = strsub(mailname, "~", "");
     }
     if (host) {
         if (notfull)
@@ -243,7 +248,10 @@
     more = 1;
     out = [];
     while (more) {
-        line = (c.start_reading_block('one))[1];
+        line = c.start_reading_block('one);
+        if (line == 'disconnected)
+            throw(~aborted, "Connection read aborted.");
+        line = line[1];
         if (line == 'aborted)
             throw(~aborted, "Connection read aborted.");
         m = regexp(line, "^([0-9]+)([- ])(.*)$");
@@ -407,6 +415,8 @@
     arg user;
     var x, host;
     
+    if (mail_aliases.contains(user))
+        return mail_aliases[user];
     if (((user[1]) == "<") && ((user[user.length()]) == ">"))
         user = user.subrange(2, (user.length()) - 2);
     if ("@" in user) {
@@ -431,11 +431,12 @@
 };
 
 public method .sendmail() {
-    arg from, recip, subj, @body;
+    arg from, recip, subj, body;
     var mailagent, header, c;
     
-    (> .perms(sender(), 'trusts) <);
-    mailagent = ((((($motd.server_name()) + " (") + ($sys.server_info('server_hostname))) + ":") + ($login_daemon.current_port())) + ")";
+    if ((!(.trusts(caller()))) && (!(.trusts(sender()))))
+        throw(~perm, ("Permission Denied: " + sender()) + " is not trusted.");
+    mailagent = ((((($motd.server_name()) + " (") + ((| (.get_hosts_setting())[1] |) || "")) + ":") + ($login_daemon.current_port())) + ")";
     (> .parse_email_address(recip) <);
     if (!from)
         from = 'postmaster;
diff -rwu ColdCore-3.0a9.02/src/smtp_daemon.cdc ColdCore-3.0a10/src/smtp_daemon.cdc
--- ColdCore-3.0a9.02/src/smtp_daemon.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/smtp_daemon.cdc	Sat Mar 14 15:49:07 1998
@@ -9,7 +9,7 @@
 var $root inited = 1;
 var $root managed = [$smtp_daemon];
 var $root manager = $smtp_daemon;
-var $smtp_daemon msg_id = 64;
+var $smtp_daemon msg_id = 143;
 
 public method .get_msg_id() {
     msg_id++;
diff -rwu ColdCore-3.0a9.02/src/smtp_interface.cdc ColdCore-3.0a10/src/smtp_interface.cdc
--- ColdCore-3.0a9.02/src/smtp_interface.cdc	Sat Mar 14 15:40:34 1998
+++ ColdCore-3.0a10/src/smtp_interface.cdc	Sat Mar 14 15:49:09 1998
@@ -1,6 +1,8 @@
 
 new object $smtp_interface: $connection_interface, $has_name;
 
+var $command_cache commands = 0;
+var $command_cache shortcuts = 0;
 var $has_commands local = #[];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
@@ -14,11 +16,11 @@
 var $smtp_interface cmd_help = #[["HELP", ["HELP [<topic>]", "    For more help on any command type 'help <cmd>'"]], ["QUIT", ["QUIT", "    Ends your mail session"]], ["EXPN", ["EXPN <recipient>", "   Expand an address."]], ["VRFY", ["VRFY <recipient>", "   Verify an address."]], ["HELO", ["HELO <hostname>", "   Introduce yourself."]], ["MAIL", ["MAIL FROM: <sender>", "   Specify sender/return path."]], ["NOOP", ["NOOP", "   Do nothing"]], ["RCPT", ["RCPT TO:<recipient>", "   Specifies the recipient.  Can be used any number of times."]], ["DATA", ["DATA", "   Following data is collected as the message", "   End with a single dot"]]];
 var $smtp_interface cmds = #[["HELP", 'help_cmd], ["QUIT", 'quit_cmd], ["VRFY", 'verify_cmd], ["EXPN", 'verify_cmd], ["HELO", 'hello_cmd], ["MAIL", 'mail_from_cmd], ["NOOP", 'noop_cmd], ["RCPT", 'recipient_cmd], ["DATA", 'data_cmd]];
 var $smtp_interface given_hostname = "";
-var $smtp_interface header = 0;
-var $smtp_interface mail_body = 0;
-var $smtp_interface mail_from = 0;
-var $smtp_interface mail_status = 0;
-var $smtp_interface mail_to = 0;
+var $smtp_interface header = [];
+var $smtp_interface mail_body = [];
+var $smtp_interface mail_from = "";
+var $smtp_interface mail_status = 'idle;
+var $smtp_interface mail_to = [];
 var $smtp_interface read_header = 0;
 
 public method .connection_starting() {
@@ -112,6 +114,7 @@
     } else {
         .reset_interface();
         mail_from = (rest.subrange(6)).trim();
+        header = [["MAIL FROM", mail_from]];
         conn.write(("250 " + mail_from) + "... sender ok");
     }
 };
@@ -128,7 +131,9 @@
     
     if (mail_status == 'read_body) {
         if (line == ".") {
-            return .send_mail();
+            .send_mail();
+            mail_status = 'idle;
+            return;
         } else {
             if (read_header) {
                 mail_body += [line];
@@ -198,7 +203,7 @@
 };
 
 public method .send_mail() {
-    var mail, l, subj;
+    var mail, l, subj, from;
     
     .set_name(mail_from, 'prop);
     mail = $mail_message.new_mail();
@@ -206,13 +206,16 @@
     for l in (header) {
         if ((l[1]) == "Subject")
             subj = l[2];
+        if ((l[1]) == "From")
+            from = l[2];
     }
+    from ?= mail_from;
     mail.set_subject(subj);
     mail.set_text(mail_body);
     catch any {
         mail.set_meta(header);
         mail.send(@mail_to);
-        mail.set_from(mail_from);
+        mail.set_from(from);
         (.connection()).write(("250 " + ($smtp_daemon.get_msg_id())) + " Message accepted for delivery");
     } with {
         (.connection()).write("550 Requested action not taken: Error delivering mail");
diff -rwu ColdCore-3.0a9.02/src/social.cdc ColdCore-3.0a10/src/social.cdc
--- ColdCore-3.0a9.02/src/social.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/social.cdc	Sat Mar 14 15:49:07 1998
@@ -1,16 +1,17 @@
 
 new object $social: $user_interfaces;
 
+var $command_cache modules = [];
 var $has_commands local = \
   #[["bow", [["bow", "*", "bow <object>", 'social_cmd, #[[1, ['object, []]]]]]]];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
 var $root created_on = 838260513;
-var $root flags = ['variables, 'methods, 'code, 'command_cache, 'core];
+var $root flags = ['variables, 'methods, 'code, 'core, 'general_cache];
 var $root inited = 1;
 var $root managed = [$social];
 var $root manager = $social;
-var $user_interfaces links = 1;
+var $user_interfaces links = 2;
 
 protected method .social_cmd() {
     arg cmdstr, cmd, @who;
diff -rwu ColdCore-3.0a9.02/src/storyteller.cdc ColdCore-3.0a10/src/storyteller.cdc
--- ColdCore-3.0a9.02/src/storyteller.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/storyteller.cdc	Sat Mar 14 15:49:05 1998
@@ -1,9 +1,13 @@
 
 new object $storyteller: $builder;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = #[];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Storyteller", "Storyteller"];
 var $located location = $body_cave;
*var $location contents = ' ' storyteller.cdc
 var $root created_on = 809928922;
diff -rwu ColdCore-3.0a9.02/src/string.cdc ColdCore-3.0a10/src/string.cdc
--- ColdCore-3.0a9.02/src/string.cdc	Sat Mar 14 15:40:24 1998
+++ ColdCore-3.0a10/src/string.cdc	Sat Mar 14 15:49:02 1998
@@ -7,7 +7,7 @@
 var $root managed = [$string];
 var $root manager = $string;
 var $string alphabet = "abcdefghijklmnopqrstuvwxyz";
-var $string base64str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+var $string base64str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 var $string non_alphanumeric = "!@#$%^&*()_+-=~`'{}[]|/?\",.<>;: ";
 var $string number_names = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"];
 var $string numbers = "0123456789";
@@ -16,9 +16,6 @@
     arg string;
     
     return $english_lib.indef_article(string);
-    if ((string[1]) in "aeiou")
-        return "an";
-    return "a";
 };
 
 public method .add_indefinite() {
@@ -306,7 +303,7 @@
 public method .is_numeric() {
     arg string;
     
-    return toint(string) || (string == "0");
+    return toint(string) || (| ((string.trim())[1]) == "0" |);
 };
 
 public method .last() {
@@ -407,6 +404,23 @@
     return strsed(str, "^(an|a|the)  *", "", "g");
 };
 
+public method .strip_html() {
+    arg str;
+    var r, ra;
+    
+    while ((r = "<" in str))
+        str = (str.subrange(1, r - 1)) + (str.subrange((">" in str) + 1));
+    str = strsub(str, "&lt;", "<");
+    str = strsub(str, "&gt;", ">");
+    str = strsub(str, "&nbsp;", " ");
+    str = strsub(str, "&quot;", "\"");
+    str = strsub(str, "&amp;", (ra = ("/" + ($code_lib.random_word())) + "\\"));
+    while ((r = "&" in str))
+        str = ((str.subrange(1, r - 1)) + "*") + (str.subrange((";" in str) + 1));
+    str = strsub(str, ra, "&");
+    return str;
+};
+
 public method .subrange(): native;
 
 public method .to_buffer() {
@@ -446,6 +446,7 @@
     line = strsub(line, "&", "&amp;");
     line = strsub(line, "<", "&lt;");
     line = strsub(line, ">", "&gt;");
+    line = strsub(line, "\"", "&quot;");
     return line;
 };
 
diff -rwu ColdCore-3.0a9.02/src/sys.cdc ColdCore-3.0a10/src/sys.cdc
--- ColdCore-3.0a9.02/src/sys.cdc	Sat Mar 14 15:40:23 1998
+++ ColdCore-3.0a10/src/sys.cdc	Sat Mar 14 15:49:02 1998
@@ -2,7 +2,7 @@
 object $sys: $root;
 
 var $root created_on = 796268969;
-var $root defined_settings = #[["loggers", #[['get, ['loggers]], ['set, ['set_loggers]], ['parse, ['parse_itemlist, 'parse_object]], ['format, ['format_itemlist]]]], ["deny-hosts", #[['get, ['deny_hosts]], ['set, ['set_deny_hosts]], ['parse, ['parse_itemlist, 'parse_deny_host]], ['format, ['format_itemlist]]]], ["deny-users", #[['get, ['deny_users]], ['set, ['set_deny_users]], ['parse, ['parse_itemlist, 'parse_deny_user]], ['format, ['format_itemlist]]]], ["backup-interval", #[['get, ['get_backup_interval]], ['set, ['set_backup_interval]], ['parse, ['parse_backup_interval]], ['format, ['fmt_backup_interval]]]], ["validate-email-addresses", #[['parse, ['is_boolean]], ['format, ['format_boolean]], ['get, ['validate_email_addresses]], ['set, ['set_validate_email_addresses]]]], ["initial-quota", #[['get, ['get_initial_quota]], ['set, ['set_initial_quota]], ['parse, ['parse_initial_quota]], ['format, ['fmt_initial_quota]]]], ["new-user-class", #[['get, ['get_new_user_class]], ['set, ['set_new_user_class]], ['parse, ['parse_new_user_class]], ['format, ['format_object]]]], ["anonymous-user-class", #[['get, ['get_anon_user_class]], ['set, ['set_anon_user_class]], ['parse, ['parse_anon_user_class]], ['format, ['format_object]]]], ["startup-objects", #[['get, ['get_startup_objects]], ['set, ['set_startup_objects]], ['parse, ['parse_itemlist, 'parse_startup_object]], ['format, ['format_itemlist]]]], ["writable-core", #[['get, ['writable_core]], ['set, ['set_writable_core]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
+var $root defined_settings = #[["loggers", #[['get, ['loggers]], ['set, ['set_loggers]], ['parse, ['parse_itemlist, 'parse_object]], ['format, ['format_itemlist]]]], ["deny-hosts", #[['get, ['deny_hosts]], ['set, ['set_deny_hosts]], ['parse, ['parse_itemlist, 'parse_deny_host]], ['format, ['format_itemlist]]]], ["deny-users", #[['get, ['deny_users]], ['set, ['set_deny_users]], ['parse, ['parse_itemlist, 'parse_deny_user]], ['format, ['format_itemlist]]]], ["backup-interval", #[['get, ['get_backup_interval]], ['set, ['set_backup_interval]], ['parse, ['parse_backup_interval]], ['format, ['fmt_backup_interval]]]], ["validate-email-addresses", #[['parse, ['is_boolean]], ['format, ['format_boolean]], ['get, ['validate_email_addresses]], ['set, ['set_validate_email_addresses]]]], ["initial-quota", #[['get, ['get_initial_quota]], ['set, ['set_initial_quota]], ['parse, ['parse_initial_quota]], ['format, ['fmt_initial_quota]]]], ["new-user-class", #[['get, ['get_new_user_class]], ['set, ['set_new_user_class]], ['parse, ['parse_new_user_class]], ['format, ['format_object]]]], ["anonymous-user-class", #[['get, ['get_anon_user_class]], ['set, ['set_anon_user_class]], ['parse, ['parse_anon_user_class]], ['format, ['format_object]]]], ["startup-objects", #[['get, ['get_startup_objects]], ['set, ['set_startup_objects]], ['parse, ['parse_itemlist, 'parse_startup_object]], ['format, ['format_itemlist]]]], ["writable-core", #[['get, ['writable_core]], ['set, ['set_writable_core]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["valid-genders", #[['parse, ['parse_itemlist, 'parse_valid_genders]], ['get, ['get_valid_genders]], ['set, ['set_valid_genders]], ['format, ['format_itemlist]]]], ["heartbeat-interval", #[['get, ['get_heartbeat_interval]], ['set, ['set_heartbeat_interval]], ['parse, ['parse_heartbeat_interval]], ['format, ['fmt_heartbeat_interval]]]]];
 var $root flags = ['methods, 'code, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$sys];
@@ -11,8 +11,10 @@
*var $sys admins = ' ' sys.cdc
*var $sys agents = ' ' sys.cdc
*var $sys backup = ' ' sys.cdc
-var $sys bindings = #[['atomic, $sys], ['create, $sys], ['backup, $sys], ['shutdown, $sys], ['set_heartbeat, $sys], ['cancel, $scheduler], ['task_info, $scheduler], ['execute, $sys], ['bind_function, $sys], ['unbind_function, $sys], ['bind_port, $daemon], ['unbind_port, $daemon], ['open_connection, $connection], ['reassign_connection, $daemon], ['fopen, $file], ['fstat, $file], ['fchmod, $file], ['fmkdir, $file], ['frmdir, $file], ['files, $file], ['fremove, $file], ['frename, $file], ['fclose, $file], ['fseek, $file], ['feof, $file], ['fwrite, $file], ['fread, $file], ['fflush, $file], ['chparents, $root], ['destroy, $root], ['dblog, $sys], ['add_var, $root], ['del_var, $root], ['variables, $root], ['list_method, $root], ['add_method, $root], ['del_method, $root], ['method_bytecode, $root], ['methods, $root], ['rename_method, $root], ['set_method_access, $root], ['set_method_flags, $root], ['data, $root], ['del_objname, $root], ['set_objname, $root], ['suspend, $scheduler], ['resume, $scheduler], ['set_user, $user], ['config, $sys]];
-var $sys core_version = "3.0a9.02";
+var $sys bindings = #[['atomic, $sys], ['create, $sys], ['backup, $sys], ['shutdown, $sys], ['set_heartbeat, $sys], ['cancel, $scheduler], ['task_info, $scheduler], ['execute, $sys], ['bind_function, $sys], ['unbind_function, $sys], ['bind_port, $daemon], ['unbind_port, $daemon], ['open_connection, $connection], ['reassign_connection, $daemon], ['fopen, $file], ['fstat, $file], ['fchmod, $file], ['fmkdir, $file], ['frmdir, $file], ['files, $file], ['fremove, $file], ['frename, $file], ['fclose, $file], ['fseek, $file], ['feof, $file], ['fwrite, $file], ['fread, $file], ['fflush, $file], ['chparents, $root], ['destroy, $root], ['dblog, $sys], ['add_var, $root], ['del_var, $root], ['variables, $root], ['list_method, $root], ['add_method, $root], ['del_method, $root], ['method_bytecode, $root], ['methods, $root], ['rename_method, $root], ['set_method_access, $root], ['set_method_flags, $root], ['data, $root], ['del_objname, $root], ['set_objname, $root], ['suspend, $scheduler], ['resume, $scheduler], ['set_user, $user], ['config, $sys], ['cache_info, $sys]];
+var $sys config_set = ['new_user_class, 'server_name, 'server_title, 'daemons];
+var $sys configured = #[];
+var $sys core_version = "3.0a10";
 var $sys deny_hosts = [];
 var $sys deny_users = [];
*var $sys loggers = ' ' sys.cdc
@@ -20,6 +22,7 @@
 var $sys startup = #[['objects, [$login_daemon, $http_daemon, $smtp_daemon, $world, $dns, $lag_watcher]], ['heartbeat_interval, 2]];
 var $sys system = [$sys, $root];
 var $sys touched = 0;
+var $sys valid_genders = [$gender_male, $gender_female, $gender_neuter];
 var $sys validate_email_addresses = 0;
 var $sys writable_core = 0;
 
@@ -83,7 +86,7 @@
     elapsed = time() - (backup['started]);
     backup = backup.del('started);
     catch any {
-        $channel_ui._broadcast('System, "Backup completed, elapsed time " + ($time.elapsed(elapsed, 'long)));
+        $channel_ui._broadcast('System, "Backup completed, elapsed time " + ($time.to_english(elapsed)));
         $channel_ui._broadcast('System, "Executing filesystem cleanup.. ");
         pause();
         pause();
@@ -91,19 +94,22 @@
     }
 };
 
+public method .cache_info() {
+    return cache_info();
+};
+
 private method .clean_database() {
-    var obj, p, c, cmd, other;
+    var obj, p, c, cmd;
     
     // cleanup some of $root's messiness
     for obj in ($root.descendants()) {
         (| obj.clean_root() |);
         refresh();
     }
-    other = (((($command_cache.children()).setremove($user_interfaces)).mmap('descendants)).flatten()).compress();
     
     // purge all command caches
-    for obj in ($has_commands.descendants()) {
-        (| obj.purge_caches() |);
+    for obj in ($command_cache.descendants()) {
+        (| obj.purge_cache() |);
         refresh();
     }
     
@@ -133,7 +139,7 @@
     for v in (definer.variables())
         code += [("(| clear_var('" + v) + ") |);"];
     meth = tosym("_root_tmp_" + time());
-    if (!(definer.add_method(code, meth))) {
+    if (!(definer.add_method(code, meth, 1))) {
         for d in (objs) {
             pause();
             (| d.(meth)() |);
@@ -142,6 +148,147 @@
     }
 };
 
+public method .configure_core() {
+    var list, l, x, t, err, s;
+    
+    if (caller() != $admin)
+        (> .perms(sender()) <);
+    s = sender();
+    
+    // if there is nothing left to config, leave..
+    if (configured) {
+        if (!(list = config_set.set_difference(configured.keys())))
+            return;
+    } else {
+        configured = #[];
+    }
+    .add_to_system(s);
+    
+    // wait for other things to finish printing messages to them
+    pause();
+    pause();
+    
+    // expand on this as we go
+    s.tell(["*" * 78, strfmt("%78{*}c", " Welcome to ColdCore "), "*" * 78]);
+    s.tell(("This is an interactive configuration system which any admin who connects (until it is completed) is sent through.  You must complete this configuration before you can do anything else.  You can skip a specific question at any time by typing '@skip'.  Suggested default values will be enclosed in square brackets.  Pressing enter without any value will use the default value.".wrap_lines(78)).mmap('center, 78));
+    s.tell("*" * 78);
+    
+    // first question please
+    if (!(configured.contains('new_user_class))) {
+        s.tell("What class should new users be created as?  Available classes:");
+        list = filter x in ($user.descendants()) where ('command_cache in (x.flags()));
+        t = .get_new_user_class();
+        list = map x in (list) to ((list == t) ? (x + " (current class)") : x);
+        s.tell(list.prefix("    "));
+        while (!l) {
+            refresh();
+            l = s.prompt(("New User Class [" + t) + "] ");
+            if (l == "@skip") {
+                s.tell("Skipping..");
+                break;
+            }
+            if (l) {
+                catch any {
+                    l = $object_lib.to_dbref(l);
+                    if (!(l in list))
+                        s.tell("Invalid selection, try again.");
+                } with {
+                    s.tell(("Invalid selection '" + l) + "'");
+                    continue;
+                }
+            } else {
+                l = t;
+            }
+            .set_setting("new-user-class", $sys, l);
+            configured = configured.add('new_user_class, 1);
+            s.tell("New User Class set to: " + l);
+        }
+        s.tell(["", "You can set this at any time, with the command:"]);
+        s.tell("  @set $sys:new-user-class=" + l);
+    }
+    refresh();
+    
+    // server name/title
+    if (!(configured.contains('server_name))) {
+        s.tell(["", "---"]);
+        t = $motd.server_name();
+        l = (s.prompt(("What is your server name? [" + t) + "] ")) || t;
+        if (l == "@skip") {
+            s.tell("Skipping..");
+        } else {
+            $motd.set_setting("server-name", $motd, l);
+            configured = configured.add('server_name, 1);
+            s.tell("Server name set to: " + l);
+        }
+        s.tell(["", "You can set this at any time, with the command:"]);
+        s.tell("  @set $motd:server-name=" + l);
+    }
+    refresh();
+    if (!(configured.contains('server_title))) {
+        s.tell(["", "---"]);
+        t = $motd.server_title();
+        l = (s.prompt(("What is your server title? [" + t) + "] ")) || t;
+        if (l == "@skip") {
+            s.tell("Skipping..");
+        } else {
+            $motd.set_setting("server-title", $motd, l);
+            configured = configured.add('server_title, 1);
+            s.tell("Server title set to: " + l);
+        }
+        s.tell(["", "You can set this at any time, with the command:"]);
+        s.tell("  @set $motd:server-title=" + l);
+    }
+    refresh();
+    if (!(configured.contains('daemons))) {
+        s.tell(["", "---"]);
+        while (1) {
+            refresh();
+            list = ($daemon.children()).setremove($login_daemon);
+            s.tell("Which network daemons do you want to have automatically startup,");
+            s.tell("Other than $login_daemon.  Available daemons:");
+            t = filter l in (startup['objects]) where (l.is($daemon));
+            for l in (list) {
+                if (l in t)
+                    s.tell(strfmt("  %20s (auto starting)", l));
+                else
+                    s.tell("  " + l);
+            }
+            l = s.prompt(("Auto-Start: [" + (t.join(", "))) + "] ");
+            if (l == "@skip") {
+                s.tell("Skipping..");
+                break;
+            } else if (!l) {
+                s.tell("Using existing daemons: " + (t.join(", ")));
+                configured = configured.add('daemons, 1);
+                break;
+            } else {
+                err = 0;
+                for x in (l.explode_english_list()) {
+                    catch any {
+                        .set_setting("startup-objects", $sys, "+" + x);
+                        s.tell(("Added " + x) + " as a startup daemon.");
+                    } with {
+                        s.tell(("Unable to add '" + x) + "' as a daemon:");
+                        s.tell("=> " + ((traceback()[1])[2]));
+                        err++;
+                    }
+                }
+                if (!err) {
+                    configured = configured.add('daemons, 1);
+                    break;
+                }
+                s.tell("Errors occurred...");
+            }
+        }
+        s.tell(["", "You can set this at any time, with the command:"]);
+        s.tell("  @set $motd:startup-objects=OBJECTS...");
+    }
+    
+    // Other things to add: HTTP Virtual Hosting info,
+    // Let them know, if they actually saw anything..
+    s.tell(["", strfmt("%79{*}c", " Configuration Complete ")]);
+};
+
 root method .core_sys(): nooverride  {
     deny_hosts = (deny_users = []);
     touched = 0;
@@ -153,6 +300,7 @@
     agents = [$root, $daemon];
     admins = [];
     writable_core = 0;
+    configured = #[];
 };
 
 private method .create() {
@@ -176,7 +324,7 @@
     arg name, password, email, @type;
     var user;
     
-    if ((!(| .perms(caller(), $login_interface) |)) && (!(| .perms(sender(), 'system) |)))
+    if ((!(| caller() == $login_interface |)) && (type((| .perms(sender(), 'system) |)) == 'error))
         throw(~perm, "Caller and Sender are not allowed to call this method.");
     [(type ?= 'new_user_class)] = type;
     catch any {
@@ -219,7 +367,7 @@
 public method .destroy_sender() {
     // potential problem spot, but sometimes its needed
     // add core definer items to the list, if you want them to call it
-    (> .perms(caller(), $exit, $connection, $connection_interface) <);
+    (> .perms(caller(), $path, $connection, $connection_interface) <);
     (> sender().destroy() <);
 };
 
@@ -256,13 +404,16 @@
 
 public method .do_shutdown() {
     arg time, why;
-    var increments, line, name, mins;
+    var increments, line, name, mins, secs;
     
     if ((!($sys.is_admin(sender()))) || (definer() != this()))
         throw(~perm, "Sender is not an admin.");
     increments = [600, 300, 180, 60];
-    while (increments && (time < (increments[1])))
+    secs = time * 60;
+    while (increments && (secs < (increments[1])))
         increments = increments.delete(1);
+    if (increments && (secs > (increments[1])))
+        increments = [secs] + increments;
     name = sender().namef('xref);
     .log(("*** SHUTDOWN called by " + name) + " ***");
     if (why) {
@@ -271,18 +422,21 @@
     }
     while (1) {
         if (!increments) {
-            $channel_ui._broadcast('all, "*** SYSTEM SHUTDOWN ***");
+            $channel_ui._broadcast('All, "*** SYSTEM SHUTDOWN ***");
             if (why)
-                $channel_ui._broadcast('all, why);
+                $channel_ui._broadcast('All, why);
             break;
         }
         line = "*** SYSTEM SHUTDOWN IN ";
         mins = (increments[1]) / 60;
         line = ((line + tostr(mins)) + " MINUTE") + ((mins == 1) ? "" : "S");
         line = ((line + " CALLED BY ") + name) + " ***";
-        $channel_ui._broadcast('all, line);
+        $channel_ui._broadcast('All, line);
         if (why)
-            $channel_ui._broadcast('all, why);
+            $channel_ui._broadcast('All, why);
+        if ((increments.length()) > 1)
+            $scheduler.sleep((increments[1]) - (increments[2]));
+        else
         $scheduler.sleep(increments[1]);
         increments = increments.delete(1);
     }
@@ -323,6 +477,12 @@
     return $time.to_english(data);
 };
 
+public method .fmt_heartbeat_interval() {
+    arg data;
+    
+    return $time.to_english(data);
+};
+
 public method .fmt_initial_quota() {
     arg data;
     
@@ -341,6 +501,12 @@
     return backup['interval];
 };
 
+public method .get_heartbeat_interval() {
+    arg @args;
+    
+    return startup['heartbeat_interval];
+};
+
 public method .get_initial_quota() {
     arg @args;
     
@@ -371,9 +537,13 @@
     return startup['objects];
 };
 
+public method .get_valid_genders() {
+    arg @ignored;
+    
+    return valid_genders;
+};
+
 driver method .heartbeat() {
-    if (sender() != 0)
-        throw(~perm, "Sender is not the server.");
     (| $scheduler.pulse() |);
     if (time() > (backup['next]))
         .do_backup(this(), 'interval);
@@ -393,19 +563,15 @@
 private method .init_database() {
     var obj, p, c, cmd, other;
     
-    // get back caches
-    other = (((($command_cache.children()).setremove($user_interfaces)).mmap('descendants)).flatten()).compress();
-    for obj in (other) {
-        (| obj.rehash_caches() |);
-        refresh();
-    }
+    // re-init caches
+    $remote_cache.rehash_cache();
     
-    // create location caches
-    for obj in ((| $location.descendants() |) || []) {
-        for p in (obj.contents()) {
-            (| obj.add_object_to_remote_cache(p) |);
-            refresh();
-        }
+    // only rehash non-general caches--general caches should be initialized
+    // as they are needed, by .cache_server_init().
+    other = ($command_cache.children()).setremove($user_interfaces);
+    other = ((other.mmap('descendants)).flatten()).compress();
+    for obj in (filter obj in (other) where (!(obj.is_general_cache()))) {
+        (| obj.rehash_cache() |);
         refresh();
     }
 };
@@ -455,7 +621,7 @@
 
 private method .make_core() {
     arg ver;
-    var obj, d, o, top, x, admin, tmp, name;
+    var obj, obj2, d, o, top, x, admin, tmp, name;
     
     // core rooms should be +core, and cant be destroyed
     // traverse the list inverseley, less unseen heirarchial shuffling
@@ -495,10 +661,14 @@
         }
         if (!(obj.has_flag('core))) {
             if (obj.children()) {
+                for obj2 in (obj.children()) {
+                    if (obj2.has_flag('core)) {
                 dblog("** ABORTING: A NON CORE OBJECT HAS CORE CHILDREN: ");
                 dblog((("** " + obj) + " => ") + (obj.children()));
                 shutdown();
             }
+                }
+            }
             catch any {
                 // dblog(".. Destroying " + obj);
                 obj.destroy();
@@ -585,6 +755,15 @@
     return obj;
 };
 
+public method .parse_heartbeat_interval() {
+    arg value, @args;
+    
+    value = (> $time.from_english(value) <);
+    if (value < 1)
+        throw(~perm, "You cannot set your heartbeat interval to less than 1 second");
+    return value;
+};
+
 public method .parse_initial_quota() {
     arg value, @args;
     
@@ -617,6 +796,22 @@
     return value;
 };
 
+public method .parse_valid_genders() {
+    arg value, action, @args;
+    var obj, kids, i;
+    
+    if (!(| (obj = $object_lib.to_dbref("gender_" + value)) |))
+        (> (obj = $object_lib.to_dbref(value)) <);
+    if (action == 'del) {
+        if ((!obj) in (.get_valid_genders()))
+            throw(~set, ("The object '" + value) + "' is not set, and thus cannot be removed");
+        return obj;
+    }
+    if ((!obj) in ($gender.children()))
+        throw(~set, ("The object '" + value) + "' is not a child of $gender");
+    return obj;
+};
+
 root method .sender_going_away() {
     admins = admins.setremove(sender());
     agents = agents.setremove(sender());
@@ -640,9 +835,12 @@
             return backup['last];
         case 'driver_version:
             tmp = .version();
-            return (((((((long ? "Cold Genesis " : "") + (tmp[1])) + ".") + (tmp[2])) + "p") + (tmp[3])) + "-") + ((listlen(tmp) == 3) ? "NEED TO UPGRADE" : (tmp[4]));
+            return (((((((long ? "Genesis " : "") + (tmp[1])) + ".") + (tmp[2])) + "p") + (tmp[3])) + "-") + ((listlen(tmp) == 3) ? "NEED TO UPGRADE" : (tmp[4]));
         case 'core_version:
             return (long ? "ColdCore " : "") + core_version;
+        case 'version:
+            tmp = .version();
+            return ((((((((("Genesis/" + (tmp[1])) + ".") + (tmp[2])) + "p") + (tmp[3])) + "-") + (tmp[4])) + " ") + "ColdCore/") + core_version;
         default:
             throw(~unknown, "Unknown flag.");
     }
@@ -690,6 +888,13 @@
     }
 };
 
+protected method .set_heartbeat_interval() {
+    arg name, definer, value;
+    
+    startup = startup.add('heartbeat_interval, value);
+    set_heartbeat(value);
+};
+
 protected method .set_initial_quota() {
     arg name, definer, value;
     
@@ -754,6 +959,21 @@
     }
 };
 
+protected method .set_valid_genders() {
+    arg name, definer, value;
+    
+    switch (value[1]) {
+        case 'set:
+            valid_genders = value[2];
+        case 'add:
+            valid_genders += [value[2]];
+        case 'del:
+            valid_genders = valid_genders.del(value[2]);
+        default:
+            throw(~type, "Unknown action: " + (value[1]));
+    }
+};
+
 protected method .set_validate_email_addresses() {
     arg name, definer, value;
     
@@ -796,7 +796,7 @@
     //           preempt tasks at this point as they will not resume.
     line = ("** Received Signal: " + signal) + " **";
     (| $channel_ui._broadcast('System, line) |);
-    if (sig in ['QUIT, 'INT]) {
+    if (signal in ['QUIT, 'INT]) {
         (| $channel_ui._broadcast('all, "******************************") |);
         (| $channel_ui._broadcast('all, "** IMMINENT SERVER SHUTDOWN **") |);
         (| $channel_ui._broadcast('all, "******************************") |);
diff -rwu ColdCore-3.0a9.02/src/tag.cdc ColdCore-3.0a10/src/tag.cdc
--- ColdCore-3.0a9.02/src/tag.cdc	Sat Mar 14 15:40:48 1998
+++ ColdCore-3.0a10/src/tag.cdc	Sat Mar 14 15:49:08 1998
@@ -9,7 +9,7 @@
 
 public method .add_ctext_flag() {
     arg self, key, value;
-    var efalgs, uflags;
+    var eflags, uflags;
     
     eflags = (self[2]).addkey(key, value);
     self = self.replace(2, eflags);
diff -rwu ColdCore-3.0a9.02/src/the_pit.cdc ColdCore-3.0a10/src/the_pit.cdc
--- ColdCore-3.0a9.02/src/the_pit.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/the_pit.cdc	Sat Mar 14 15:49:06 1998
@@ -1,6 +1,9 @@
 
 new object $the_pit: $place;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = <$ctext_frob, [["A cozy atmosphere pervades this room, a small hideaway where people can come to relax and socialize. The cement walls are covered with various scribbles burn marks, and stains of unrecognizable origin."], #[]]>;
 var $event_handler hooked = #[];
 var $event_handler hooks = #[];
diff -rwu ColdCore-3.0a9.02/src/thing.cdc ColdCore-3.0a10/src/thing.cdc
--- ColdCore-3.0a9.02/src/thing.cdc	Sat Mar 14 15:40:28 1998
+++ ColdCore-3.0a10/src/thing.cdc	Sat Mar 14 15:49:03 1998
@@ -10,13 +10,12 @@
 var $located obvious = 1;
 var $root created_on = 796268969;
 var $root defined_settings = #[["home", #[['get, ['home]], ['parse, ['parse_home]]]], ["gender", #[['get, ['gender]], ['set, ['set_gender]], ['parse, ['parse_gender_setting]]]], ["lock", #[['get, ['get_lock]], ['set, ['set_lock]], ['parse, ['parse_lock]], ['format, ['format_lock]]]]];
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$thing];
 var $root manager = $thing;
 var $root settings = #[["home", $lost_and_found]];
-var $thing gender = 0;
+var $thing gender = $gender_neuter;
 var $thing lock = <$true_lock_frob, []>;
 
 public method .boot_cmd() {
@@ -24,7 +23,7 @@
     var loc, dest, exit;
     
     loc = .location();
-    if (!(| .perms(sender(), 'manager) |)) {
+    if (!(| loc.perms(sender(), 'manager) |)) {
         .tell((((sender().name()) + " tried to boot you from ") + (loc.name())) + "!");
         loc.announce((((((sender().name()) + " tried to boot ") + (.name())) + " from ") + (loc.name())) + "!", sender(), this());
         return ((("Only " + ((loc.manager()).name())) + " can boot people from ") + (loc.name())) + "!";
@@ -41,17 +40,6 @@
     }
 };
 
-public method .check_gender() {
-    arg definer, value, @args;
-    var g, gs;
-    
-    gs = [$gender_female, $gender_male, $gender_neuter];
-    g = value in (gs.mmap('name));
-    if (!g)
-        throw(~set, "Gender must be one of: " + ((gs.mmap('name)).to_english("", " or ")));
-    return gs[g];
-};
-
 public method .directed_tell() {
     arg @args;
     
@@ -120,7 +108,7 @@
     if (!(| .perms(sender()) |))
         return ((("Only " + ((.manager()).name())) + " can lock ") + (.name())) + "!";
     catch ~objnf, ~parse {
-        lock = $lock_parser.parse(str, sender());
+        lock = $lock_frob.parse(str, sender());
         return ((((("You lock " + (.name())) + " ") + prep) + " ") + (lock.lock_name('thing))) + ".";
     } with {
         switch (error()) {
@@ -136,7 +124,7 @@
     arg value, @args;
     var g, gs;
     
-    gs = [$gender_female, $gender_male, $gender_neuter];
+    gs = $sys.get_valid_genders();
     g = value in (gs.mmap('name));
     if (!g)
         throw(~set, "Gender must be one of: " + ((gs.mmap('name)).to_english("", " or ")));
@@ -148,7 +136,7 @@
     var home;
     
     home = (> .match_environment(value) <);
-    if ((!(home.trusts(sender()))) && (!(home.get_setting("public-home", $place))))
+    if ((!(home.is_writable_by(user()))) && ((!(home.trusts(sender()))) && (!(home.get_setting("public-home", $place)))))
         throw(~notpublic, ("You do not have permission to make " + (home.name())) + " your home.");
     return home;
 };
@@ -160,7 +148,7 @@
         value = "no";
     else if (value in ["unlock", "unlocked"])
         value = "yes";
-    return (> $lock_parser.parse(value, user() || this()) <);
+    return (> $lock_frob.parse(value, user() || this()) <);
 };
 
 protected method .set_gender() {
@@ -179,15 +167,10 @@
         lock = value;
 };
 
-public method .tell() {
-    arg @args;
-    
-};
-
 public method .try_lock() {
     arg mover;
     
-    return lock && ((mover != $exit) && (lock.try(mover)));
+    return lock && ((mover != $path) && (lock.try(mover)));
 };
 
 public method .unlock_cmd() {
@@ -205,9 +205,9 @@
     (> pass(mover, place) <);
     if (mover.is($housekeeper))
         return;
-    if (lock && ((mover != $exit) && (!(lock.try(mover)))))
+    if (lock && ((mover != $path) && ((mover != $location) && (!(lock.try(mover))))))
         throw(~locked, ((((.name()).capitalize()) + " is locked to ") + (lock.lock_name('thing))) + ".");
-    else if (!(.is_writable_by(sender())))
+    else if (!(.trusts(sender())))
         throw(~move, "You cannot move " + this());
 };
 
diff -rwu ColdCore-3.0a9.02/src/thing_frob.cdc ColdCore-3.0a10/src/thing_frob.cdc
--- ColdCore-3.0a9.02/src/thing_frob.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/thing_frob.cdc	Sat Mar 14 15:49:07 1998
@@ -6,7 +6,6 @@
 var $located location = $void;
 var $located obvious = 1;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core, 'frob];
 var $root inited = 1;
 var $root managed = [$thing_frob];
@@ -56,9 +55,15 @@
 
 private method .change_data() {
     arg this, what, new, @remove;
+    var l;
     
-    if (valid(this['location]))
+    l = this['location];
+    if (valid(l)) {
+        if ((<this(), this>) in (l.contents()))
         (this['location]).del_frob_from_contents((<this(), this>));
+        else if (what != 'location)
+            throw(~perm, "Bogus location information in frob.");
+    }
     if (remove)
         this = this.del(what);
     else
@@ -123,7 +128,7 @@
     still = ("Do you still want to describe " + (.name(this))) + "? [no] ";
     if (!(set.contains('described_prose))) {
         while (!end) {
-            if (.is(this, $exit))
+            if (.is(this, $path))
                 type = "exit ";
             else
                 type = "";
@@ -254,6 +259,12 @@
     return 1;
 };
 
+frob method .is_writable_by() {
+    arg this, obj;
+    
+    return (| obj in (.writers(this)) |) || ($sys.is_system(obj));
+};
+
 frob method .local_commands() {
     arg this;
     
@@ -266,6 +277,12 @@
     return (| this['location] |) || $nowhere;
 };
 
+frob method .lock() {
+    arg this;
+    
+    return this['lock];
+};
+
 frob method .manager() {
     arg this;
     
@@ -306,6 +323,12 @@
     return pass(name);
 };
 
+frob method .msgs(): nooverride  {
+    arg this;
+    
+    return (| this['msgs] |) || #[];
+};
+
 frob method .name() {
     arg dict, @args;
     var name;
@@ -421,11 +444,8 @@
     
     if (!new)
         return;
-    if (new && ((new[1]) in ["$", "#"]))
-        throw(~invname, "Names cannot begin with \"$\" or \"#\".");
-    if (match_regexp(new, "^(a|an|the) +"))
-        throw(~bad_name, "Do not include articles in name, use +u +n or +p instead.");
     [(type ?= 'normal)] = args;
+    (> $code_lib.valid_name(new, type) <);
     switch (type) {
         case 'prop:
             new = [type, new, new];
@@ -500,7 +500,7 @@
     arg this, mover, place;
     
     if (!(> .try_lock(this, mover) <))
-        throw(~locked, ((((.name()).capitalize()) + " is locked to ") + ((this['lock]).lock_name('thing))) + ".");
+        throw(~locked, (((((this['name])[3]).capitalize()) + " is locked to ") + ((this['lock]).lock_name('thing))) + ".");
     return 1;
 };
 
diff -rwu ColdCore-3.0a9.02/src/time.cdc ColdCore-3.0a10/src/time.cdc
--- ColdCore-3.0a9.02/src/time.cdc	Sat Mar 14 15:40:50 1998
+++ ColdCore-3.0a10/src/time.cdc	Sat Mar 14 15:49:25 1998
@@ -3,6 +3,7 @@
 
 var $root created_on = 796268969;
 var $root flags = ['methods, 'code, 'variables, 'core];
+var $root help_node = $help_obj_time;
 var $root inited = 1;
 var $root managed = [$time];
 var $root manager = $time;
@@ -39,7 +40,8 @@
     // will eventually make flags do things like 'long etc.  For now its
     // just your own time, rather than time().
     [(flag ?= 'stopwatch)] = flag;
-    str = "";
+    
+    // time = time() - time;
     switch (flag) {
         case 'long:
             return .to_english(time);
@@ -67,7 +67,7 @@
     // most of this was stolen from MOO (und ve are evil)
     if (time < 1)
         return "0 seconds";
-    reftime = reftime || time();
+    [(reftime ?= time())] = reftime;
     words = ["year", "month", "day", "hour", "minute", "second"];
     times = [];
     for x in ([60, 60, 24]) {
diff -rwu ColdCore-3.0a9.02/src/trash.cdc ColdCore-3.0a10/src/trash.cdc
--- ColdCore-3.0a9.02/src/trash.cdc	Sat Mar 14 15:40:32 1998
+++ ColdCore-3.0a10/src/trash.cdc	Sat Mar 14 15:49:06 1998
@@ -1,21 +1,25 @@
 
 new object $trash: $located_location;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = <$ctext_frob, [["When you discard something, it goes here if you do not manage it."], #[]]>;
+var $event_handler hooks = #[];
 var $has_commands local = #[];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
 var $has_name name = ['uniq, "System Trash Can", "the System Trash Can"];
 var $located location = $void;
 var $located obvious = 1;
*var $location contents = ' ' trash.cdc
 var $root created_on = 830126811;
 var $root flags = ['variables, 'methods, 'code, 'core];
 var $root inited = 1;
 var $root managed = [$trash];
 var $root manager = $trash;
 var $thing gender = $gender_neuter;
-var $trash items = #[];
+var $trash items = #[[$wearable_frob, 888456716]];
 
 public method .del_sender_from_contents() {
     pass();
diff -rwu ColdCore-3.0a9.02/src/user.cdc ColdCore-3.0a10/src/user.cdc
--- ColdCore-3.0a9.02/src/user.cdc	Sat Mar 14 15:40:31 1998
+++ ColdCore-3.0a10/src/user.cdc	Sat Mar 14 15:49:05 1998
@@ -1,9 +1,12 @@
 
-new object $user: $body, $mail_ui, $command_aliases, $bad_commands, $help_ui, $editor_reference, $channel_ui, $user_info, $menu;
+new object $user: $body, $mail_ui, $command_aliases, $bad_commands, $help_ui, $editor_reference, $channel_ui, $user_info, $menu, $www_preferences;
 
 var $channel_ui active_channels = #[];
 var $channel_ui channel_dict = #[];
 var $command_aliases command_aliases = [];
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = [];
 var $has_commands local = \
   #[["@quit", [["@quit", "", "@quit", 'quit_cmd, #[]]]], ["i?nventory", [["i?nventory", "", "i?nventory", 'inventory_cmd, #[]]]], ["@audit", [["@audit", "*", "@audit <any>", 'audit_cmd, #[[1, ['any, []]]]]]],\
@@ -98,10 +101,14 @@
   ["PUEBLOCLIENT",\
     [["PUEBLOCLIENT", "*", "PUEBLOCLIENT <any>", 'pueblo_cmd, #[[1, ['any, []]]]]]],\
   ["@ways|@exits",\
-    [["@ways|@exits", "*", "@ways|@exits <any>", 'ways_cmd, #[[1, ['any, []]]]]]]];
-var $has_commands shortcuts = #[["--*", ['remote_cmd, ["@page ", "", " with ", 1]]], ["-* *", ['remote_cmd, ["@page ", 1, " with ", 2]]]];
+    [["@ways|@exits", "*", "@ways|@exits <any>", 'ways_cmd, #[[1, ['any, []]]]]]],\
+  ["@tut?orial",\
+    [["@tut?orial", "*", "@tut?orial <any>", 'tutorial_cmd, #[[1, ['any, []]]]]]],\
+  ["null",\
+    [["null", "*", "null <any>", 'null_cmd, #[[1, ['any, []]]]]]]];
+var $has_commands shortcuts = #[["--*", ['remote_cmd, ["@page ", "", " with ", 1]]], ["-* *", ['remote_cmd, ["@page ", 1, " with ", 2]]], ["/*", ['null_cmd, ["null ", 1]]]];
 var $has_name name = ['prop, "Generic User Object", "Generic User Object"];
-var $located location = $void;
+var $located location = $body_cave;
 var $located obvious = 1;
*var $location contents = ' ' user.cdc
 var $mail_list last_letter = 0;
@@ -115,14 +122,15 @@
 var $mail_ui subscribed = #[[$user, [791485891, 0]]];
 var $root created_on = 796268969;
 var $root defined_settings = #[["experienced", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["global-tell", #[['get, ['get_global_tell]], ['set, ['set_global_tell]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["cols", #[['get, ['get_cols]], ['set, ['set_cols]], ['parse, ['is_type, 'integer]]]], ["rows", #[['get, ['get_rows]], ['set, ['set_rows]], ['parse, ['is_type, 'integer]]]], ["prompt", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["auto-look", #[['get, ['get_auto_look]], ['set, ['set_auto_look]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["content-type", #[['set, ['set_content_type]], ['parse, ['parse_content_type]], ['format, ['format_content_type]], ['clear, ['clear_content_type]], ['get, ['get_content_type]]]], ["extended-parsers", #[['parse, ['parse_ext_parsers]], ['format, ['format_ext_parsers]]]], ["exit-style", #[['parse, ['parse_exit_style]]]], ["title", #[['get, ['title]], ['set, ['set_title]]]]];
-var $root flags = ['methods, 'code, 'core, 'command_cache, 'variables];
+var $root flags = ['methods, 'core, 'code, 'variables, 'general_cache];
 var $root inited = 1;
 var $root managed = [$user];
 var $root manager = $user;
+var $root quota = 76800;
 var $root settings = #[["experienced", 0], ["exit-style", 'none], ["home", $body_cave], ["prompt", 0], ["extended-parsers", []]];
 var $root trusted_by = [$user_db];
 var $thing gender = $gender_neuter;
-var $user action = 0;
+var $user action = "";
 var $user activity = 0;
 var $user auto_look = 0;
 var $user cols = 0;
@@ -130,7 +138,7 @@
 var $user connected_seconds = 0;
 var $user connections = [];
 var $user content_type = 'plain;
-var $user context = #[['last, $root], ["it", $robot]];
+var $user context = 0;
 var $user evaluator = 0;
 var $user ext_parsers = 0;
 var $user failed = 0;
@@ -138,7 +146,7 @@
 var $user global_tell = 0;
 var $user last_command_at = 0;
 var $user monitor = 0;
-var $user parsers = [$command_parser];
+var $user parsers = [$command_parser, $channel_parser];
 var $user password = "*";
 var $user reap_notified = 0;
 var $user registered = 0;
@@ -149,7 +157,7 @@
 
 public method ._edit_mail_callback() {
     arg text, cdata;
-    var list, subj, err, mail;
+    var list, subj, err, mail, nosend, sent;
     
     // not necessarily safe perm checks
     (> .perms(caller(), $editor_session, $editor_reference) <);
@@ -166,9 +174,19 @@
     mail.set_subject(subj);
     mail.set_text(text);
     catch any
-        mail.send(@list);
+        nosend = mail.send(@list);
     with
         return ['failed, [(traceback()[1])[2]]];
+    if (nosend) {
+        sent = list.set_difference(nosend);
+        if (sent)
+            err = ["Mail sent to " + (sent.map_to_english('mail_name))];
+        else
+            err = [];
+        nosend = list.set_difference(sent);
+        err += ["Mail NOT sent to " + (nosend.map_to_english('mail_name))];
+        return ['failure, err];
+    }
     return ['success, ["Mail sent to " + (list.map_to_english('mail_name))]];
 };
 
@@ -197,7 +215,7 @@
     } else {
         c2 = ((| sender().linelen() |) || 79) / 10;
         c1 = c2 * 4;
-        fmt = "%3L%*L %*L %*L";
+        fmt = "%5L%*L %*L %*L";
         out = [strfmt(fmt, "#", c1, "Name", c2, "Flags", c2, "Size") + "Manager"];
         for obj in (objs) {
             line = strfmt(fmt, obj.(multi)(@args).length(), c1, obj.namef('xref), c2, $object_lib.see_perms(obj, ["", ""]), c2, obj.size());
@@ -216,18 +234,22 @@
     
     switch (type(what)) {
         case 'frob:
-            what = $parse_lib.filter_ctext(what, #[['formatter, formatter]]);
+            what = $parse_lib.filter_ctext(what, #[['formatter, formatter], ["viewer", this()]]);
         case 'string:
+            if (!(args && ((args[1]).contains('nomod)))) {
             if (content_type == 'html)
                 what = (((what.replace("&", "&amp;")).replace("<", "&lt;")).replace(">", "&gt;")) + "<br>";
+                else if (content_type == 'tkmoo)
+                    what = (what.replace("}", "\}")).replace("{", "\{");
     
             //           if (content_type == 'wrapped) {
             //              what = strsub(what, "\\", "\\\\");
             //              what = str_to_buf(what.wrap_line(.linelen(), " ") + "\n");
             //          }
+            }
         case 'list:
             for line in (what)
-                ._tell(line);
+                ._tell(line, @args);
             return;
         case 'buffer:
             throw(~nobuf, "You are not allowed to send buffers.");
@@ -313,11 +335,17 @@
             switch (error()) {
                 case ~ambig:
                     .tell(((("The name \"" + p) + "\" can match any of: ") + ($list.to_english(filter x in ($user_db.users()) where (x.match_begin(p))))) + ".");
+                    continue;
                 default:
+                    // hack, look for robots..
+                    catch any {
+                        person = ($robot.children()).match_object(p);
+                    } with {
                     .tell(("I don't know who \"" + p) + "\" is.");
-            }
             continue;
         }
+            }
+        }
         who += [person];
     }
     if (!who)
@@ -520,9 +548,9 @@
         gender = (obj.gender()).pronoun('psc);
     else
         gender = "It";
-    out = [((obj.name()) + " was created on ") + ($time.format("%A %B %d %Y", time)), ((gender + " is ") + ($time.elapsed(time() - time, 'long))) + " old."];
+    out = [((obj.name()) + " was created on ") + ($time.format("%A %B %d %Y", time)), ((gender + " is ") + ($time.to_english(time() - time))) + " old."];
     if (obj.is($user))
-        out += [((gender + " has logged ") + ($time.elapsed(obj.connected_seconds(), 'long))) + " online."];
+        out += [((gender + " has logged ") + ($time.to_english(obj.connected_seconds()))) + " online."];
     return out;
 };
 
@@ -588,7 +616,7 @@
     arg str, @cinfo;
     var match, warn;
     
-    (> .perms(caller(), definer(), $login_interface, $security_lib) <);
+    (> .perms(caller(), definer(), $login_interface, $security_lib, $pop3_interface) <);
     
     // no password means always match
     if (!password)
@@ -828,12 +856,31 @@
     // for now we dont core the bug system
     (| .del_command("@rep?ort", 'report_cmd) |);
     (| .del_method('report_cmd) |);
+    if (this() == definer())
+        context = 0;
+    else
+        (| clear_var('context) |);
 };
 
-public method .date_cmd() {
+protected method .date_cmd() {
     arg @args;
+    var fmt_full, fmt_time, d, hr, min, r, pm, lt;
     
-    .tell($time.format("%I:%M %p %A, %B %d %Y %Z"));
+    fmt_time = "%I:%M %p";
+    fmt_full = fmt_time + " %A, %B %d %Y %Z";
+    .tell(strfmt("%20l ", "Server Time:") + ($time.format(fmt_full)));
+    d = ((.location()).realm()).get_setting("weather-time", $realm);
+    lt = ((d[5]).local_time()) + (d[6]);
+    hr = ((lt / 3600) + (d[6])) % 24;
+    if (hr >= 12) {
+        pm = "PM";
+        if (hr > 12)
+            hr -= 12;
+    } else {
+        pm = "AM";
+    }
+    min = (lt / 60) % 60;
+    .tell((((strfmt("%20l %2{0}r:%2{0}r ", (((d[3]).realm()).name()) + " Time:", hr, min) + pm) + " (") + (d[2])) + "time)");
 };
 
 public method .del_command_alias() {
@@ -931,7 +978,7 @@
     (> .perms(caller(), 'command) <);
     args = (args.replace(" from ", " ")).explode();
     if ((!args) || ((args.length()) != 2))
-        .tell_error(cmd + " <writer> [from] <object>");
+        (> .tell_error(cmd + " <writer> [from] <object>") <);
     writer = .match_env_nice(args[1]);
     obj = .match_env_nice(args[2]);
     catch any {
@@ -1000,7 +1047,7 @@
         if (!(s in ["yes", "y"]))
             return ("Ok, not discarding " + (target.name())) + ".";
     }
-    if (((target.location()) != this()) && (!(target.is($exit))))
+    if (((target.location()) != this()) && (!(target.is($path))))
         return ("You are not holding " + (target.name())) + ".";
     name = target.name();
     if (type(target) == 'frob) {
@@ -1072,7 +1119,7 @@
     if (obj.has_ancestor($located))
         out += ["Location (@move):    " + ($object_lib.get_name(obj.location(), 'namef, ['xref]))];
     if ((desc = (| obj.prose() |)))
-        out += ["Description (@describe): ", @(type(desc) == 'frob) ? (desc.uncompile()) : ((type(desc) == 'list) ? desc : [desc])];
+        out += ["Description:", "@describe " + ((type(obj) == 'frob) ? (obj.name()) : obj), @(type(desc) == 'frob) ? (desc.uncompile()) : ((type(desc) == 'list) ? desc : [desc]), "."];
     if ((cmds = (| obj.remote_commands() |)))
         out += $command_lib.format_commands_short(#[[obj, cmds]], "Remote", .linelen());
     if ((cmds = (| obj.local_commands() |)))
@@ -1272,7 +1319,7 @@
     
     (> .perms(caller(), 'command) <);
     if (loc == this())
-        return ("You already have " + (what.name())) + ".";
+        return "Huh?  Get what?";
     for c in (loc.contents()) {
         if (c.match_name(what))
             obj = c;
@@ -1439,13 +1486,23 @@
 public method .is_tellable_by() {
     arg caller, sender;
     
-    return (sender == this()) || (caller in [$place, $user, $programmer, $admin, $mail_ui, $help_ui]);
+    return (sender == this()) || (caller in [$place, $user, $programmer, $admin, $mail_ui, $help_ui, $editor_session]);
 };
 
 public method .last_command_at() {
     return last_command_at;
 };
 
+public method .last_matched_object() {
+    var match;
+    
+    if ((match = (| context['last] |))) {
+        if (valid(match))
+            return match;
+    }
+    return 0;
+};
+
 public method .linelen() {
     if (cols)
         return cols - 1;
@@ -1459,17 +1516,14 @@
     arg connection;
     var loc, cmd, p, c, last, tmp;
     
+    set_user();
+    .poll_semaphore('cleanup);
     if ((sender() != this()) || (definer() != caller()))
         throw(~perm, "Invalid access to private method.");
     task_connections = #[];
     (| .reset_parsers() |);
-    for cmd in (.local_commands()) {
-        for c in (cmd[2])
-            .add_to_local_cache(c[1]);
-    }
+    .cache_client_init();
     (| .reset_help_history() |);
-    for p in (parents())
-        (| p.cache_init() |);
     $user_db.did_connect();
     if (reap_notified)
         clear_var('reap_notified);
@@ -1492,6 +1546,9 @@
     .hook_events('startup);
     $world.hook_into_event('realm_announce);
     context = #[];
+    if (formatter == $pueblo_format)
+        .set_content_type_pueblo();
+    .release_semaphore('cleanup);
 };
 
 public method .login_again() {
@@ -1509,7 +1566,7 @@
 
 protected method .login_notify(): forked  {
     arg connection, last;
-    var l, sub, out, ans;
+    var l, sub, out, ans, d, hr, min, pm;
     
     sub = .subscribed();
     out = [];
@@ -1519,14 +1576,26 @@
     }
     if (out)
         .tell("<Mail> New mail on lists: " + (out.to_english()));
-    if ((.last_received_on()) > (((.subscribed())[this()])[1]))
+    if ((| (.last_received_on()) > (((.subscribed())[this()])[1]) |))
         .tell("<Mail> You have new mail (use `@help mail` to learn about mail)");
     if (last)
         .tell("<Login> Last connected at " + ($time.format("%A %B %d %I:%M %p %Y", abs(last))));
+    d = ((.location()).realm()).get_setting("weather-time", $realm);
+    hr = ((((d[5]).local_time()) / 3600) - (d[6])) % 24;
+    if (hr > 12) {
+        pm = "PM";
+        hr -= 12;
+    } else {
+        pm = "AM";
+    }
+    min = ((((d[5]).local_time()) / 60) - (d[6])) % 60;
+    .tell((((("<Login> It is currently " + strfmt("%2{0}r:%2{0}r " + pm, hr, min)) + " (") + (d[2])) + "time) in ") + (((d[3]).realm()).name()));
     if (failed) {
         (| .tell(("<Login> ** " + failed) + " failed login attempts **") |);
         (| clear_var('failed) |);
     }
+    if (!(.prose('literal)))
+        .tell(["You have not yet set a description for yourself.", "Perhaps you'd like to take a look at the tutorial.", "Type @tutorial to read about how to set a description and more."]);
 };
 
 public method .logout() {
@@ -1553,9 +1622,7 @@
     } else {
         (| $user_db.last_log_disconnect($guest) |);
     }
-    (| .purge_caches() |);
-    for p in (parents())
-        p.cache_uninit();
+    .cache_client_uninit();
     $channel_ui._broadcast('Login, (((.namef('titled)) + " has disconnected (total: ") + ($user_db.total_connected())) + ")");
     task_connections = #[];
     .set_activity("");
@@ -1676,25 +1743,11 @@
     return context[str];
 };
 
-public method .match_env_nice() {
-    arg name, @syntax;
-    var obj, args, line;
-    
-    catch any {
-        return (> .match_environment(name) <);
-    } with {
-        if (syntax)
-            (> .tell_error(syntax[1], (traceback()[1])[2]) <);
-        else
-            throw(~stop, (traceback()[1])[2]);
-    }
-};
-
 public method .match_environment() {
     arg str;
     var match, gend;
     
-    if ((!str) && (match = (| context['last] |))) {
+    if ((str == ".") && (match = (| context['last] |))) {
         if (valid(match))
             return match;
     }
@@ -1710,6 +1763,7 @@
         if (gend)
             context = context.add(gend.pronoun('po), match);
     }
+    if (type(context) == 'dictionary)
     context = context.add('last, match);
     return match;
 };
@@ -1741,7 +1795,7 @@
             return "You are not monitoring what you hear.";
         out = [];
         len = .linelen();
-        for e in (monitor || []) {
+        for e in ((monitor || []).reverse()) {
             line = strfmt("%20S %30S ", (| (e[1]).namef('xref) |) || toliteral(e[1]), ((((e[2]) + ".") + (e[4])) + "() line ") + (e[5])) + (e[6]);
             if (strlen(line) > len)
                 line = line.chop(len);
@@ -1774,7 +1828,7 @@
     } else {
         who = this();
     }
-    if ((what = regexp(args, "^([a-z0-9.-]+) *= *(.*)$"))) {
+    if ((what = regexp(args, "^([^=]+)=(.*)$"))) {
         name = (what[1]).trim();
         args = (what[2]).trim();
     } else {
@@ -1783,23 +1837,12 @@
     }
     if (!name)
         return ([("-- Messages on " + (who.namef('ref))) + ":"] + (.format_messages(who))) + ["---"];
-    name = split(name, " *\. *");
-    if (listlen(name) == 1) {
-        name = name[1];
-        branch = "";
-    } else if (listlen(name) == 2) {
-        [name, branch] = name;
-    } else {
-        return ("Invalid Message name \"" + (name.join("."))) + "\"";
-    }
+    [name, @branch] = split(name, " *\. *", "b");
     if (!($code_lib.valid_message_id(name)))
         return ("Invalid Message name \"" + name) + "\"";
-    if (branch && (!($code_lib.valid_message_id(branch))))
-        return ((("Invalid Message branch \"" + name) + ".") + branch) + "\"";
     msg = args.unquote();
     catch any {
-        definer = who.msg_definer(name);
-        branch ?= "general";
+        [definer, name, branch] = who.parse_msg(name, branch);
         if (clear)
             who = who.clear_msg(name, branch);
         else
@@ -1955,6 +1998,11 @@
     }
 };
 
+public method .null_cmd() {
+    arg @args;
+    
+};
+
 public method .parse_content_type() {
     arg value, @args;
     var type, types, valid, f;
@@ -2049,7 +2097,9 @@
             if ((traceback()[1])[2])
                 .tell((traceback()[1])[2]);
         } else {
-            .tell_traceback(traceback(), line, 0, error());
+            .tell(traceback().fmt_tb());
+    
+            //  .tell_traceback(traceback(), line, 0, error());
         }
     }
     catch any
@@ -2166,6 +2216,69 @@
     return info || #[];
 };
 
+public method .pose_cmd() {
+    arg cmdstr, cmd, args;
+    var state, verb, verbs, i, prep, p, vp, obj, recips, victims, others, self, m;
+    
+    (> .perms(caller(), $user, $body) <);
+    if (!args)
+        return;
+    args = args.trim();
+    if ((args[strlen(args)]) in ".?!") {
+        p = substr(args, strlen(args));
+        args = strsed(args, "[,.?!]", "", "g");
+    } else {
+        p = "";
+    }
+    [verb, @args] = explode(args);
+    if (match_regexp(verb, "(ch|s)$"))
+        verbs = verb + "es";
+    else if (match_regexp(verb, "[^a]y$"))
+        verbs = substr(verb, 1, strlen(verb) - 1) + "ies";
+    else
+        verbs = verb + "s";
+    recips = [];
+    for i in (args) {
+        // Don't try to match these to the environment.
+        if (i in ["to", "for", "out", "from", "on", "at"]) {
+            if (prep) {
+                break;
+            } else {
+                prep = i;
+                args = sublist(args, 2);
+            }
+        } else if (i in ["a", "an", "the"]) {
+            break;
+        } else if (i == "and") {
+            args = sublist(args, 2);
+        } else if ((| (obj = .match_environment(i)) |)) {
+            args = sublist(args, 2);
+            recips = recips.add(obj);
+        } else {
+            break;
+        }
+    }
+    if (prep) {
+        verb = [verb, prep].join();
+        verbs = [verbs, prep].join();
+    }
+    self = .name();
+    for i in (recips) {
+        victims = [];
+        victims = map obj in (recips) to ((obj == i) ? "you" : (obj.name()));
+        m = join([self, verbs, victims.to_english()] + args) + p;
+        i.directed_tell(m, this());
+    }
+    if (recips != [])
+        args = [(recips.mmap('name)).to_english(), @args];
+    others = ([.name(), verbs, @args].join()) + p;
+    self = (["You", verb, @args].join()) + p;
+    (.location()).announce(others, @recips, this());
+    return self;
+    
+    // Created Oct 1997, Neale Pickett
+};
+
 public method .prompt() {
     arg prompt, @abort_msg;
     
@@ -2192,9 +2305,7 @@
     
     if (!(.is_tellable_by(caller(), sender())))
         throw(~perm, "Only allowed objects may call protected tell.");
-    
-    // switch (flags['type]) {
-    ._tell(what);
+    ._tell(what, flags);
 };
 
 public method .pueblo_cmd() {
@@ -2228,10 +2339,10 @@
     else
         tail = "** Aborted **; Text thrown away.";
     if (head)
-        .tell(head);
+        .ptell(head, #[['type, 'read]]);
     output = (.task_connection()).start_reading_block('multiple);
     if ((output == 'aborted) && tail)
-        .tell(tail);
+        .ptell(tail, #[['type, 'read]]);
     return output;
 };
 
@@ -2296,28 +2407,13 @@
 
 protected method .rehash_cmd() {
     arg cmdstr, cmd;
-    var c, p;
+    var c, o, p;
     
     (> .perms(caller(), 'command) <);
-    .tell("Rehashing your command caches...");
-    pause();
-    
-    // purge first 
-    (| .purge_caches() |);
-    
-    // let the parents know we are "going away"
-    for p in (parents())
-        p.cache_uninit();
-    
-    // now rehash, hand-pick our own commands
-    for cmd in (.local_commands()) {
-        for c in (cmd[2])
-            .add_to_local_cache(c[1]);
-    }
-    
-    // let the parents know we are back
-    for p in (parents())
-        p.cache_init();
+    .tell("Rehashing your commands...");
+    .cache_client_uninit();
+    .cache_client_init();
+    .tell("Done.");
 };
 
 protected method .remember_cmd() {
@@ -2407,7 +2503,7 @@
         name = (name[1])[1];
         if ((name[1]) == "$") {
             if (((obj.is($user)) || (obj.is($place))) && (!(.is($admin))))
-                return "User objnames can only be changed by administrators.";
+                return "User and Place objnames can only be changed by administrators.";
             name = substr(name, 2);
             if (!(name.valid_ident()))
                 return "Object names can only contain a-z, 0-9 and the underscore.";
@@ -2484,12 +2580,12 @@
         clear = 1;
         args = what[2];
     }
-    if ((what = regexp(args, "^ *\+(def|definers|d) *= *\$?([a-z0-9_]+) *(.*)"))) {
+    if ((what = regexp(args, "^ *\+(def|definer|definers|d) *= *\$?([a-z0-9_]+) *(.*)"))) {
         if (!(showdef = (| lookup(tosym(what[2])) |)))
             return "Invalid definer $" + (what[2]);
         args = what[3];
     }
-    if ((what = regexp(args, "^ *\+(def|definers|d) *(.*)"))) {
+    if ((what = regexp(args, "^ *\+(def|definer|definers|d) *(.*)"))) {
         showdef = 1;
         args = what[2];
     }
@@ -2745,39 +2841,11 @@
     ._tell(what);
 };
 
-public method .tell_error() {
-    arg syntax, @problem;
-    var problem, line, sprefix, prefix, length;
-    
-    // arg 1 == syntax
-    // arg 2 == problem lines
-    length = .linelen();
-    if (syntax)
-        .tell(("=> Syntax: `" + syntax) + "`");
-    if (problem) {
-        for line in (problem) {
-            if (type(line) == 'string)
-                line = line.wrap_lines(length, "!  ", 1);
-            .tell(line);
-        }
-    }
-    throw(~stop, "");
-};
-
 public method .tell_traceback() {
-    arg traceback, @args;
-    var tt, name, eargs, error, str;
+    arg traceback;
     
-    // tt = tell_traceback || ['verbose, 0, "! "];
-    [(str ?= ""), (eargs ?= 0), (error ?= 0)] = args;
-    tt = ['verbose, -1, "! "];
-    traceback = $parse_lib.traceback(traceback, tt[2], tt[3], error);
-    if (args)
-        name = (| $list.to_english($list.mmap(args, 'namef, 'ref)) |);
-    if (!name)
-        name = "Object";
-    .tell((traceback[1]).replace("%O", name));
-    .tell(traceback.subrange(2));
+    // legacy hook, its just as easy to to call .fmt_tb yourself 
+    .tell(traceback.fmt_tb());
 };
 
 public method .test() {
@@ -2813,6 +2881,29 @@
     return [(what.namef('ref)) + " trusts:"] + (._list_objects(what.trusted('literal), 'trusted_by));
 };
 
+public method .tutorial_cmd() {
+    arg cmdstr, cmd, args;
+    var tuts, t, start;
+    
+    args = args.trim();
+    tuts = filter t in ($tutorial.children()) where ((t.minclass()) && (.is(t.minclass())));
+    if (!args)
+        t = $introductory_tutorial;
+    else if (args == "?")
+        return ["All tutorials available to your class:", "    " + (tuts.map_to_english('name)), ("Use '" + cmd) + " TUTORIAL' for the specific tutorial you wish to enter."];
+    else if (!(t = find t in (tuts) where ((t.name()) == args)))
+        return [("Unknown or unavailable tutorial '" + args) + "', try one of:", "    " + (tuts.map_to_english('name))];
+    if ((.location()).is($tutorial))
+        return "You are already in a tutorial, you must exit it before you can enter another one.";
+    start = t.get_setting("start-topic", $tutorial);
+    if (!start)
+        return "Uhoh! There is no starting topic for that tutorial!";
+    (.location()).announce((((.name()) + " enters the ") + ((t.name()).capitalize())) + " Tutorial.", this());
+    .move_to(start);
+    if (!(.get_setting("auto-look", $user)))
+        return ["You enter the tutorial.", "", "The Tutorials use place descriptions to explain topics.  Your auto-look is turned off, you should turn it on in order to see each topic automatically."];
+};
+
 root method .uninit_user() {
     var conn;
     
@@ -2874,10 +2965,11 @@
 
 protected method .ways_cmd() {
     arg cmdstr, cmd, rest;
-    var exits, e, line, out;
+    var exits, e, line, out, loc;
     
     (> .perms(caller(), 'command) <);
-    exits = (.location()).visible_exits();
+    loc = .location();
+    exits = loc.visible_exits();
     if (!exits)
         return "There are no visible exits from this room.";
     
@@ -2887,9 +2979,9 @@
     if ((.get_setting("exit-style", $user)) == 'none) {
         out += ["Visible exits: "];
         for e in (exits)
-            out += [((("  " + (e.name())) + ((e.name_templates()) ? ((" (" + ((e.name_templates()).to_english())) + ")") : "")) + " to ") + ((e.dest()).name())];
+            out += [((("  " + (e.name())) + ((e.name_templates()) ? ((" (" + ((e.name_templates()).to_english())) + ")") : "")) + " to ") + ((e.dest(loc)).name())];
     } else {
-        out += (.location()).format_exits(exits, #[['actor, this()]]);
+        out += loc.format_exits(exits, #[['actor, this()]]);
     }
     return out + ["---"];
 };
@@ -2948,7 +3040,7 @@
     }
     if (!args)
         return "Ack, nobody to list?";
-    .tell($code_lib.generate_listing(@args));
+    .ptell($code_lib.generate_listing(@args), #[['type, 'command]]);
 };
 
 public method .will_move() {
@@ -2958,21 +2958,21 @@
     if (place.is($user))
         throw(~user, "Users cannot move into other users!");
     if ((mover.is($user)) && ((mover != this()) && (!($sys.is_system(mover)))))
-        throw(~user, "Only administrators can freely move users around.");
+        throw(~user, "Only system priviledged objects can freely move users around.");
 };
 
 protected method .writers_cmd() {
     arg cmdstr, cmd, what;
     
     (> .perms(caller(), 'command) <);
-    return [(what.namef('ref)) + " is a writer for:"] + (._list_objects(what.writers('literal), 'writes));
+    return [(what.namef('ref)) + " is writable by:"] + (._list_objects(what.writers('literal), 'writes));
 };
 
 protected method .writes_cmd() {
     arg cmdstr, cmd, what;
     
     (> .perms(caller(), 'command) <);
-    return [(what.namef('ref)) + " is a writer on:"] + (._list_objects(what.writes(), 'writers));
+    return [(what.namef('ref)) + " is a writer for:"] + (._list_objects(what.writes(), 'writers));
 };
 
 
diff -rwu ColdCore-3.0a9.02/src/user_info.cdc ColdCore-3.0a10/src/user_info.cdc
--- ColdCore-3.0a9.02/src/user_info.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/user_info.cdc	Sat Mar 14 15:49:04 1998
@@ -1,6 +1,9 @@
 
 new object $user_info: $user_interfaces;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands local = #[];
 var $has_commands remote = #[];
 var $has_commands shortcuts = #[];
@@ -68,7 +71,7 @@
     
     i = (| info[name] |) || [0, ""];
     if ((!(i[1])) && (!(.is_writable_by(sender))))
-        throw(~private, ("'" + name) + "' is private.");
+        throw(~private, ("'" + name) + "' is private user information.");
 };
 
 public method .set_info_default() {
@@ -124,8 +124,8 @@
     
     // call this method to bypass the settings system.
     i = (| info[name] |) || ((| info["rl-" + name] |) || [0, ""]);
-    if ((!(i[1])) && (!(.is_writable_by(sender()))))
-        throw(~private, ("'" + name) + "' is private.");
+    if ((!(i[1])) && ((!(.is_writable_by(sender()))) && ((caller() != $mail_list) && (caller() != $mail_message))))
+        throw(~private, ("'" + name) + "' is private user information.");
     return i[2];
 };
 
diff -rwu ColdCore-3.0a9.02/src/user_interfaces.cdc ColdCore-3.0a10/src/user_interfaces.cdc
--- ColdCore-3.0a9.02/src/user_interfaces.cdc	Sat Mar 14 15:40:30 1998
+++ ColdCore-3.0a10/src/user_interfaces.cdc	Sat Mar 14 15:49:04 1998
@@ -1,29 +1,15 @@
 
 new object $user_interfaces: $command_cache;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $has_commands shortcuts = #[];
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$user_interfaces];
 var $root manager = $user_interfaces;
 var $user_interfaces links = 0;
-
-public method .interface_link() {
-    (> .perms(caller(), $command_cache) <);
-    links++;
-    if ((!(.local_cache())) || (!(.remote_cache())))
-        .rehash_caches();
-};
-
-public method .interface_unlink() {
-    (> .perms(caller(), $command_cache) <);
-    links--;
-    if (links < 1) {
-        .purge_caches();
-        (| clear_var('links) |);
-    }
-};
 
 
diff -rwu ColdCore-3.0a9.02/src/user_parsers.cdc ColdCore-3.0a10/src/user_parsers.cdc
--- ColdCore-3.0a9.02/src/user_parsers.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/user_parsers.cdc	Sat Mar 14 15:49:25 1998
@@ -2,7 +2,6 @@
 new object $user_parsers: $misc;
 
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
 var $root inited = 1;
 var $root managed = [$user_parsers];
diff -rwu ColdCore-3.0a9.02/src/void.cdc ColdCore-3.0a10/src/void.cdc
--- ColdCore-3.0a9.02/src/void.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/void.cdc	Sat Mar 14 15:49:06 1998
@@ -1,10 +1,13 @@
 
 new object $void: $place;
 
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
 var $described prose = ["A place existing for the soul purpose of doing so, when it wishes be."];
 var $event_handler hooks = #[];
 var $has_name name = ['uniq, "Void", "the Void"];
*var $location contents = ' ' void.cdc
 var $place entrances = [];
 var $place exits = [];
 var $place realm = $realm_of_creation;
diff -rwu ColdCore-3.0a9.02/src/wearable_frob.cdc ColdCore-3.0a10/src/wearable_frob.cdc
--- ColdCore-3.0a9.02/src/wearable_frob.cdc	Sat Mar 14 15:40:33 1998
+++ ColdCore-3.0a10/src/wearable_frob.cdc	Sat Mar 14 15:49:07 1998
@@ -4,9 +4,8 @@
 var $described prose = [];
 var $has_commands remote = #[];
 var $has_name name = ['normal, "Generic Wearable Frob", "a Generic Wearable Frob"];
-var $located location = $lost_and_found;
+var $located location = $trash;
 var $root created_on = 796268969;
-var $root fertile = 1;
 var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
 var $root inited = 1;
 var $root managed = [$wearable_frob];
@@ -31,6 +31,14 @@
     else if (valid(this['location]))
         (this['location]).add_frob_to_contents((<this(), this>));
     return (<this(), this>);
+};
+
+frob method .discard() {
+    arg data;
+    
+    if (!(data['worn]))
+        pass(data);
+    (data['worn]).shed((<this(), data>));
 };
 
 public method .new() {
diff -rwu ColdCore-3.0a9.02/src/word.cdc ColdCore-3.0a10/src/word.cdc
--- ColdCore-3.0a9.02/src/word.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/word.cdc	Sat Mar 14 15:49:03 1998
@@ -72,11 +72,8 @@
     top = dict_values(get_var(name)).last();
     pick = random(top);
     for v in (get_var(name)) {
-        if ((v[2]) > pick) {
-            if (!last)
+        if ((v[2]) > pick)
                 return v[1];
-            return last;
-        }
         last = v[1];
     }
     return last;
diff -rwu ColdCore-3.0a9.02/src/world.cdc ColdCore-3.0a10/src/world.cdc
--- ColdCore-3.0a9.02/src/world.cdc	Sat Mar 14 15:40:26 1998
+++ ColdCore-3.0a10/src/world.cdc	Sat Mar 14 15:49:03 1998
@@ -10,9 +10,9 @@
 var $root inited = 1;
 var $root managed = [$world];
 var $root manager = $world;
-var $root settings = #[["managed", []], ["starting-place", $the_pit], ["heartbeat-rate", 600], ["weather-rate", 1500]];
+var $root settings = #[["managed", []], ["starting-place", $the_pit], ["heartbeat-rate", 600], ["weather-rate", 5000]];
 var $root trusted = [$realm];
*var $world last_weather_change = ' ' world.cdc
 
 root method .core_world() {
     .set_setting("managed", $world, "[]");
diff -rwu ColdCore-3.0a9.02/src/world_time.cdc ColdCore-3.0a10/src/world_time.cdc
--- ColdCore-3.0a9.02/src/world_time.cdc	Sat Mar 14 15:40:49 1998
+++ ColdCore-3.0a10/src/world_time.cdc	Sat Mar 14 15:49:25 1998
@@ -3,11 +3,12 @@
 
 var $root created_on = 848446570;
 var $root flags = ['variables, 'methods, 'code, 'core];
+var $root help_node = $help_obj_world_time;
 var $root inited = 1;
 var $root managed = [$world_time];
 var $root manager = $world_time;
-var $world_time speedup = 1;
-var $world_time start_time = 0;
+var $world_time speedup = 3;
+var $world_time start_time = 873375987;
 var $world_time time_units = [[31536000, "year", "years", "yr", "yrs"], [2592000, "month", "months", "mo", "mos"], [604800, "week", "weeks", "wk", "wks"], [86400, "day", "days", "dy", "dys"], [3600, "hour", "hours", "hr", "hrs"], [60, "minute", "minutes", "min", "mins"], [1, "second", "seconds", "sec", "secs"]];
 var $world_time zone_offset = 0;
 
@@ -16,7 +17,7 @@
     
     // This is not very flexible, but works well enough. Note that southern
     // hemisphere needs another object, with opposite seasons.
-    return ["spring", "summer", "fall", "winter"][(((.local_time()) / 172800) % 4) + 1];
+    return ["spring", "summer", "fall", "winter"][(((.local_time()) / 2592000) % 4) + 1];
 };
 
 public method .daytime() {
@@ -90,7 +90,7 @@
     for i in (ulist) {
         t = time / ((time_units[i])[1]);
         if (t)
-            s += [((t + " ") + ((time_units[i])[2])) + (t ? "s" : "")];
+            s += [((t + " ") + ((time_units[i])[2])) + ((t != 1) ? "s" : "")];
         time = time % ((time_units[i])[1]);
     }
     return s.to_english();
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/climate_creation.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,17 @@
+
+new object $climate_creation: $climate;
+
+var $climate daylengths = [0, 2, 0, -2];
+var $climate realm = $realm_of_creation;
+var $climate seasons = ["spring", "summer", "fall", "winter"];
+var $climate weathers = #[[$weather_nice, [50, 40, 20, 10]], [$weather_hot, [30, 60, 10, 2]], [$weather_windy, [10, 5, 10, 15]], [$weather_stormy, [0, 10, 0, 0]], [$weather_rainy, [30, 20, 60, 40]], [$weather_snowy, [10, 1, 10, 40]]];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $root created_on = 839896989;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$climate_creation];
+var $root manager = $climate_creation;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_admin_commands.cdc	Sat Mar 14 15:49:19 1998
@@ -0,0 +1,15 @@
+
+new object $help_admin_commands: $help_admin;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Admin Commands", "Admin Commands"];
+var $help_node body = <$ctext_frob, [[<$format, ["b", [], ["Administrative Commands Listing"], 'do_b]>, " ", <$format, ["np", [], [], 'do_np]>, "The following commands are available for administrators: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_adjust"]], ["@adjust"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Promotes a user to builder, programmer, or admin."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_core"]], ["@core"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Makes the object a core object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_kick"]], ["@kick"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["\"Kicks\" a user off the server."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_newpwd"]], ["@new-password"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Makes a new password for a user."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_quota"]], ["@quota"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Changes a users quota."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_rehashall"]], ["@rehash-all"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Updates ALL command caches in memory."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_tasks"]], ["@task?s"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Shows Database and Driver tasks (processes)."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_backup"]], ["@backup"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Starts the database backup process."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_kill"]], ["@kill"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Kills a task."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_mojo"]], ["@mojo"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Turns on or off mojo. (full system priveledges)"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_reap"]], ["@reap"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Used to show players who have not logged on for a specified amount of time. (default 3 months)"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_shutdown"]], ["@shutdown"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Shutsdown the game. Can be time delayed."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['links, #[["@adjust", "$help_cmd_adjust"], ["@core", "$help_cmd_core"], ["@kick", "$help_cmd_kick"], ["@new-password", "$help_cmd_newpwd"], ["@quota", "$help_cmd_quota"], ["@rehash-all", "$help_cmd_rehashall"], ["@task?s", "$help_cmd_tasks"], ["@backup", "$help_cmd_backup"], ["@kill", "$help_cmd_kill"], ["@mojo", "$help_cmd_mojo"], ["@reap", "$help_cmd_reap"], ["@shutdown", "$help_cmd_shutdown"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@adjust", $help_cmd_adjust], ["@core", $help_cmd_core], ["@kick", $help_cmd_kick], ["@new-password", $help_cmd_newpwd], ["@quota", $help_cmd_quota], ["@rehash-all", $help_cmd_rehashall], ["@task?s", $help_cmd_tasks], ["@backup", $help_cmd_backup], ["@kill", $help_cmd_kill], ["@mojo", $help_cmd_mojo], ["@reap", $help_cmd_reap], ["@shutdown", $help_cmd_shutdown]];
+var $root created_on = 889749740;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_admin_commands];
+var $root manager = $help_admin_commands;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_administrators.cdc	Sat Mar 14 15:49:19 1998
@@ -0,0 +1,26 @@
+
+new object $help_administrators: $help_coldcore;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Administrators|Admins", "Administrators|Admins"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_subsystem;
+var $help_node links = #[];
+var $root created_on = 887666903;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_administrators];
+var $root manager = $help_administrators;
+
+public method .body() {
+    arg @ignored;
+    var admins, x, output;
+    
+    admins = [];
+    for x in ($sys.admins())
+        admins += [[x, (x.get_setting("admin-role", $admin)) || "General Administrator"]];
+    output = map x in (admins) to ($cml_lib.format_tr_tag($cml_lib.format_td_tag($cml_lib.format_obj_tag('look, x[1], (x[1]).name())), $cml_lib.format_td_tag(x[2])));
+    return $ctext_frob.new_with([$cml_lib.format_dfn_tag(["Admins:", $cml_lib.format_p_tag(), $cml_lib.format_table_tag("25%,75%", @output)])]);
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_building_commands.cdc	Sat Mar 14 15:49:11 1998
@@ -0,0 +1,16 @@
+
+new object $help_building_commands: $help_building;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Building commands|Builder commands", "Building commands|Builder commands"];
+var $has_name templates = ["Builder commands"];
+var $help_node body = <$ctext_frob, [[<$format, ["b", [], ["Builder Commands Listing"], 'do_b]>, " ", <$format, ["np", [], [], 'do_np]>, "The following commands are available to builders: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_attach"]], ["@attach"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Attaches an exit to a $place"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_build"]], ["@build"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["A script-like interface to simplify the building process."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_children"]], ["@child?ren"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists the object's children and shows some brief information about them."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_defmsg"]], ["@def-msg"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Used to define messages on an object"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_destroy"]], ["@destroy"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Destroys an object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_dig"]], ["@dig"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Makes a new place and can attach exits with a single command."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_msg"]], ["@msg?s"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Used to view and set messages on objects."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_move"]], ["@move"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Moves an object to another location."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_new"]], ["@new"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Creates a new object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_parents"]], ["@par?ents"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists parents of the object."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_realms"]], ["@realm?s"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Shows all known realms."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_teleport"]], ["@teleport or @go"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Moves you a specified location."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], [<$format, ["link", [["node", "$help_cmd_defmsg"]], ["@undef-msg"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Removes a message from an object."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['links, #[["@attach", "$help_cmd_attach"], ["@build", "$help_cmd_build"], ["@child?ren", "$help_cmd_children"], ["@def-msg", "$help_cmd_defmsg"], ["@destroy", "$help_cmd_destroy"], ["@dig", "$help_cmd_dig"], ["@msg?s", "$help_cmd_msg"], ["@move", "$help_cmd_move"], ["@new", "$help_cmd_new"], ["@par?ents", "$help_cmd_parents"], ["@realm?s", "$help_cmd_realms"], ["@teleport or @go", "$help_cmd_teleport"], ["@undef-msg", "$help_cmd_defmsg"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@attach", $help_cmd_attach], ["@build", $help_cmd_build], ["@child?ren", $help_cmd_children], ["@def-msg", $help_cmd_defmsg], ["@destroy", $help_cmd_destroy], ["@dig", $help_cmd_dig], ["@msg?s", $help_cmd_msg], ["@move", $help_cmd_move], ["@new", $help_cmd_new], ["@par?ents", $help_cmd_parents], ["@realm?s", $help_cmd_realms], ["@teleport or @go", $help_cmd_teleport], ["@undef-msg", $help_cmd_defmsg]];
+var $root created_on = 889749160;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_building_commands];
+var $root manager = $help_building_commands;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_aca.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_aca: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-command-a?lias|@aca?lias", "@add-command-a?lias|@aca?lias"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@add-command-a?lias|@aca?lias \"<alias>\" [to] \"<command>\""], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@aca allows you to alias one command to another name. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@aca \"poof %1\" to \"pub %1\"\nNew command alias \"poof %1\" => \"pub %1\" added.\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The new alias 'poof %1' will now allow you to talk on the public channel (to which 'pub %1' points to) as such: ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">poof hello all!\n<Public> Vampire: hello all!\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_dca"]], ["@dca?lias"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_ca"]], ["@ca?liases"], 'do_link]>], #[['links, #[["@dca?lias", "$help_cmd_dca"], ["@ca?liases", "$help_cmd_ca"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@dca?lias", $help_cmd_dca], ["@ca?liases", $help_cmd_ca]];
+var $root created_on = 874972060;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_aca];
+var $root manager = $help_cmd_aca;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_add_trustee.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_add_trustee: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-trustee|@at", "@add-trustee|@at"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878186279;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_add_trustee];
+var $root manager = $help_cmd_add_trustee;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_add_writer.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_add_writer: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-writer|@aw", "@add-writer|@aw"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@add-writer|@aw <writer> [to] <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Sets who, in addition to the ", <$format, ["link", [["node", "$help_cmd_manager"]], ["manager"], 'do_link]>, ", may modify this object.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_del_writer"]], ["@del-writer"], 'do_link]>], #[['links, #[["manager", "$help_cmd_manager"], ["@del-writer", "$help_cmd_del_writer"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["manager", $help_cmd_manager], ["@del-writer", $help_cmd_del_writer]];
+var $root created_on = 878186322;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_add_writer];
+var $root manager = $help_cmd_add_writer;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_addshortcut.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_addshortcut: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-shortcut|@as", "@add-shortcut|@as"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@add-s?hortcut|@as \"<shortcut>\" [to] <command> [on] <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command adds a shortcut to a <command> on <object>. This is similar to the ", <$format, ["link", [["node", "$help_cmd_addcmd"]], ["@add-command"], 'do_link]>, " command, however, @add-shortcut allows you to alias an existing command, to a shorter or different name. ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_cmd_delshortcut"]], ["@del-shortcut"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_aca"]], ["@add-command-alias"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_dca"]], ["@del-command-alias"], 'do_link]>], #[['links, #[["@add-command", "$help_cmd_addcmd"], ["@del-shortcut", "$help_cmd_delshortcut"], ["@add-command-alias", "$help_cmd_aca"], ["@del-command-alias", "$help_cmd_dca"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@add-command", $help_cmd_addcmd], ["@del-shortcut", $help_cmd_delshortcut], ["@add-command-alias", $help_cmd_aca], ["@del-command-alias", $help_cmd_dca]];
+var $root created_on = 870589235;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_addshortcut];
+var $root manager = $help_cmd_addshortcut;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_ca.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_ca: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@command-a?liases|@ca?liases", "@command-a?liases|@ca?liases"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@command-a?liases|@ca?liases"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@command-aliases lists any and all commands that you have aliased to another command. See ", <$format, ["link", [["node", "$help_cmd_aca"]], ["@add-command-alias"], 'do_link]>, "."], #[['links, #[["@add-command-alias", "$help_cmd_aca"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@add-command-alias", $help_cmd_aca]];
+var $root created_on = 874973168;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_ca];
+var $root manager = $help_cmd_ca;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_acm.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_acm: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-channel-manager|@acm", "@add-channel-manager|@acm"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187174;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_acm];
+var $root manager = $help_cmd_channel_acm;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_add.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_add: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@add-channel|@addcom", "@add-channel|@addcom"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187456;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_add];
+var $root manager = $help_cmd_channel_add;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_dcm.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_dcm: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@del-channel-manager|@dcm", "@del-channel-manager|@dcm"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187203;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_dcm];
+var $root manager = $help_cmd_channel_dcm;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_desc.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_desc: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@desc-channel", "@desc-channel"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@desc-c?hannel <channel> as <description>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command sets a <channel>'s title that can be seen with ", <$format, ["link", [["node", "$help_cmd_channels"]], ["@channel"], 'do_link]>, ". The channels description should be something informative, so that users will know what it is for, such as the principle topic of the channel."], #[['links, #[["@channel", "$help_cmd_channels"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@channel", $help_cmd_channels]];
+var $root created_on = 878187228;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_desc];
+var $root manager = $help_cmd_channel_desc;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_join_lock.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_join_lock: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@join-lock-channel|@jlc", "@join-lock-channel|@jlc"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187263;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_join_lock];
+var $root manager = $help_cmd_channel_join_lock;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_leave_lock.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_leave_lock: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@leave-lock-channel|@llc", "@leave-lock-channel|@llc"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187289;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_leave_lock];
+var $root manager = $help_cmd_channel_leave_lock;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_purge.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_purge: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@purge-channel", "@purge-channel"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187342;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_purge];
+var $root manager = $help_cmd_channel_purge;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channel_use_lock.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channel_use_lock: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@use-lock-channel|@ulc", "@use-lock-channel|@ulc"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878187316;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channel_use_lock];
+var $root manager = $help_cmd_channel_use_lock;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_channels.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_channels: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@channels", "@channels"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@channel?s [+f?ull +d?etailed]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Without either of the two options, this command displays the channels that you are currently listening too. The +full option displays all the channels available; the +detailed option displays information regarding each of the channels, such as the ", <$format, ["link", [["node", "$help_cmd_channel_desc"]], ["title"], 'do_link]>, ", number of current listeners, the channel owner, and the ", <$format, ["link", [["node", "$help_cmd_channel_acm"]], ["channel manager"], 'do_link]>, "."], #[['links, #[["title", "$help_cmd_channel_desc"], ["channel manager", "$help_cmd_channel_acm"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["title", $help_cmd_channel_desc], ["channel manager", $help_cmd_channel_acm]];
+var $root created_on = 878187484;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_channels];
+var $root manager = $help_cmd_channels;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_chmanage.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_chmanage: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@chmanage", "@chmanage"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, "Syntax: ", <$format, ["tt", [], ["@chman?age <objref> to <user>"], 'do_tt]>, " ", <$format, ["np", [], [], 'do_np]>, "Changes the object's manager."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870925778;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_chmanage];
+var $root manager = $help_cmd_chmanage;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_chmod.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_chmod: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@chmod|@mmod|@omod|@chflags", "@chmod|@mmod|@omod|@chflags"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@mmod <options> <method> [<method ..]"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@omod <options> <object> [<object ..]"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@chmod <options> <object> [<object ..]"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@chflag <options> <object> [<object ..]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "These commands modify access flags on the object or method speficied. All of these are effectively aliases of each other, and are named for easy rememberance as to their function. For the purposes of this help, @chflag will be used, but all the other commands operate the same way. ", <$format, ["np", [], [], 'do_np]>, "The following table lists which flags may be used with each type of object or method. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["np", [], [], 'do_np]>, " Flags can be: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["method ", <$format, ["link", [["node", "$help_coldc_methods_access"]], ["access"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["d?river, pri?vate, pro?tected, pu?blic, r?oot, fr?ob"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["method ", <$format, ["link", [["node", "$help_coldc_methods_flags"]], ["behavior"], 'do_link]>], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["no?override, l?ocked, na?tive, fo?rked"], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["objects"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["cod?e, cor?e, fe?rtile, m?ethods, v?ariables"], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[['links, #[["access", "$help_coldc_methods_access"], ["behavior", "$help_coldc_methods_flags"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["access", $help_coldc_methods_access], ["behavior", $help_coldc_methods_flags]];
+var $root created_on = 870646867;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_chmod];
+var $root manager = $help_cmd_chmod;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_configsetting.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_configsetting: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@config-setting|@configure-setting", "@config-setting|@configure-setting"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@config-set?ting|@configure-set?ting <definer>:<setting>[=default] [options]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command displays how settings are currently setup, and can modify the options that were set when the setting was created with ", <$format, ["link", [["node", "$help_cmd_defsetting"]], ["@def-setting"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@config-set me:rl-email\nReconfigured setting $user_info:rl-email as:\n    +get=get_user_info\n    +set=set_user_info\n    +clear=clear_user_info\n    +format=format_user_info\n    +access=public_user_info\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The options and their definations can be found by looking at the ", <$format, ["link", [["node", "$help_cmd_defsetting"]], ["@def-setting"], 'do_link]>, " help page."], #[['links, #[["@def-setting", "$help_cmd_defsetting"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@def-setting", $help_cmd_defsetting]];
+var $root created_on = 870647269;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_configsetting];
+var $root manager = $help_cmd_configsetting;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_cs.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_cs: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@cleanup-sessions|@c-s", "@cleanup-sessions|@c-s"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@cleanup-sessions|@c-s <editor session number>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command destroys old editor sessions which are running in the background, any changes which have been made to these edit sessions will not be saved. To find out which (if any) sessions you have running, use the ", <$format, ["link", [["node", "$help_cmd_edit"]], ["@edit"], 'do_link]>, " command."], #[['links, #[["@edit", "$help_cmd_edit"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@edit", $help_cmd_edit]];
+var $root created_on = 877035960;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_cs];
+var $root manager = $help_cmd_cs;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_dca.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_dca: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@del-command-a?lias|@dca?lias", "@del-command-a?lias|@dca?lias"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@del-command-a?lias|@dca?lias <alias>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command deletes an alias previously created with ", <$format, ["link", [["node", "$help_cmd_aca"]], ["@add-command-alias"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@del-command-alias \"poof %1\"\nDeleted command alias \"poof %1\".\n"], 'do_quote]>], 'do_dfn]>], #[['links, #[["@add-command-alias", "$help_cmd_aca"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@add-command-alias", $help_cmd_aca]];
+var $root created_on = 874972098;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_dca];
+var $root manager = $help_cmd_dca;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_defsetting.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_defsetting: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@def-setting|@define-setting", "@def-setting|@define-setting"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@def-set?ting|@define-set?ting <definer>:<setting>[=default] [options]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command creates, and sets up new settings that can be modified with ", <$format, ["link", [["node", "$help_cmd_set"]], ["@set"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, " Options can be: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+get"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets the method that is called when you try to get the contents of the setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+get-a?rgs"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Data to return when the setting is gotten. If this option is empty, when the setting is gotten it returns the contents of the setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+set"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets the method that is called in order to set this setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+set-a?rgs"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Additional data used by the method in +set option."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+parse"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets the method that is called when you @set the setting, this method then parses it before saving it to the setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+parse-a?rgs"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Additional data used by the method in +parse option."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+c?lear"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets the method for clearing the setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+f?ormat"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets the method that is called when other methods want the setting formatted for display."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+a?ccess"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Sets that determines who or what has access to this setting."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+t?ype"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Types can be any ColdC type, 'boolean, or 'item-list."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_cmd_configsetting"]], ["@config-setting"], 'do_link]>], #[['links, #[["@set", "$help_cmd_set"], ["@config-setting", "$help_cmd_configsetting"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@set", $help_cmd_set], ["@config-setting", $help_cmd_configsetting]];
+var $root created_on = 870647223;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_defsetting];
+var $root manager = $help_cmd_defsetting;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_del_trustee.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_del_trustee: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@del-trustee|@dt", "@del-trustee|@dt"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878186361;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_del_trustee];
+var $root manager = $help_cmd_del_trustee;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_del_writer.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_del_writer: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@del-writer|@dw", "@del-writer|@dw"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@del-writer|@dw <writer> [to] <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Deletes a person or object from the list of things able to modify the object.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_add_writer"]], ["@add-writer"], 'do_link]>], #[['links, #[["@add-writer", "$help_cmd_add_writer"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@add-writer", $help_cmd_add_writer]];
+var $root created_on = 878186385;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_del_writer];
+var $root manager = $help_cmd_del_writer;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_delshortcut.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_delshortcut: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@del-shortcut|@ds", "@del-shortcut|@ds"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@ds \"<shortcut>\" [from] <objref>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Removes an existing shortcut from an object. ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_cmd_addshortcut"]], ["@add-shortcut"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_aca"]], ["@add-command-alias"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_dca"]], ["@del-command-alias"], 'do_link]>], #[['links, #[["@add-shortcut", "$help_cmd_addshortcut"], ["@add-command-alias", "$help_cmd_aca"], ["@del-command-alias", "$help_cmd_dca"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@add-shortcut", $help_cmd_addshortcut], ["@add-command-alias", $help_cmd_aca], ["@del-command-alias", $help_cmd_dca]];
+var $root created_on = 870646752;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_delshortcut];
+var $root manager = $help_cmd_delshortcut;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_drop.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_drop: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "drop", "drop"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["drop <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows you to move objects in your ", <$format, ["link", [["node", "$help_cmd_inventory"]], ["inventory"], 'do_link]>, " to your current location.", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_get"]], ["get"], 'do_link]>], #[['links, #[["inventory", "$help_cmd_inventory"], ["get", "$help_cmd_get"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["inventory", $help_cmd_inventory], ["get", $help_cmd_get]];
+var $root created_on = 870926490;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_drop];
+var $root manager = $help_cmd_drop;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_edit.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_edit: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@edit", "@edit"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@edit"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@edit <prose> [+t?ype]"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@edit <method> [+t?ype]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "In the first case @edit will report if you have any editor sessions running in the background. To end these editor sessions, you can either resume them and exit properly from them, or you can kill them with ", <$format, ["link", [["node", "$help_cmd_cs"]], ["@cleanup-sessions"], 'do_link]>, ". ", <$format, ["np", [], [], 'do_np]>, "In the second case, users can use @edit to change descriptions (prose) of things. Such as in the example below. ", <$format, ["np", [], [], 'do_np]>, "As a programmer, additional functionality is provided, that allows you to edit methods with this command. ", <$format, ["np", [], [], 'do_np]>, "Without [+t?ype], a reasonable default is chosen. The [+t?ype] option takes the following possible inputs: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "20%,80%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["help"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Edits the help text on an object (such as a help node)."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["messages"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Edits the messages on the object. See also: ", <$format, ["link", [["node", "$help_cmd_msg"]], ["@msg"], 'do_link]>], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["prose"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Edits the objects description."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["text"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Edits the text the object contains (such as in a $note)."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@edit me\nEditor invoked with Vampire/prose.\nType 'help' to list available commands.\n>list\n  =>1: Some silly description\n    2: An insane, poorly spelling\n    3: creature.\n  [END]\n>done\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_sys_editor"]], ["Editor subsystem"], 'do_link]>], #[['links, #[["@cleanup-sessions", "$help_cmd_cs"], ["@msg", "$help_cmd_msg"], ["Editor subsystem", "$help_sys_editor"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@cleanup-sessions", $help_cmd_cs], ["@msg", $help_cmd_msg], ["Editor subsystem", $help_sys_editor]];
+var $root created_on = 877034883;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_edit];
+var $root manager = $help_cmd_edit;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_eval.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_eval: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@eval", "@eval"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@eval [<code>]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows a programmer to test <code> prior to ", <$format, ["link", [["node", "$help_cmd_program"]], ["@program"], 'do_link]>, "'ing it. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@eval .location().announce(\"This is a test of the frozen broadcasting company.\")\n\nThis is a test of the frozen broadcasting company.\n=> $courtyard (the Courtyard)\n[ seconds: 1.1022141; operations: 1506 (1506 ticks per second) ]\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "In this example, the .location() gives us the object name of where we currently are ($courtyard). The .announce() says that this location should announce to all the players in this location our message (\"This is a test of the frozen broadcasting company.\"). Inorder for this to work, you must be able to evaluate on the location. The @eval command displays our message to everyone if it completed successfully, as well as the object that we evaluate on, and the amount of time, operations, and ticks per second it took to preform our evaluation.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_coldc"]], ["ColdC Reference Manual"], 'do_link]>], #[['links, #[["@program", "$help_cmd_program"], ["ColdC Reference Manual", "$help_coldc"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@program", $help_cmd_program], ["ColdC Reference Manual", $help_coldc]];
+var $root created_on = 870647020;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_eval];
+var $root manager = $help_cmd_eval;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_exits.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_exits: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@ways|@exits", "@ways|@exits"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: '", <$format, ["tt", [], ["@ways"], 'do_tt]>, "' ", <$format, ["np", [], [], 'do_np]>, "@ways command prints the exits from the current room. Its exact formatting depends on the ", <$format, ["tt", [], ["exit-style"], 'do_tt]>, " setting on the player (can be one of none, brief, template?s, long or verbose)."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926312;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_exits];
+var $root manager = $help_cmd_exits;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_forget.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_forget: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@forget", "@forget"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@forget <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This is the opposite of the ", <$format, ["link", [["node", "$help_cmd_remember"]], ["@remember"], 'do_link]>, " command. This allows you to selectively forget things that you have aliased to easier to remember names.", <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_remembered"]], ["@remembered"], 'do_link]>], #[['links, #[["@remember", "$help_cmd_remember"], ["@remembered", "$help_cmd_remembered"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@remember", $help_cmd_remember], ["@remembered", $help_cmd_remembered]];
+var $root created_on = 874199317;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_forget];
+var $root manager = $help_cmd_forget;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_get.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_get: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "get|take", "get|take"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["get|take <object>"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["get|take <object> from <location>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows you to move objects from your current location to your ", <$format, ["link", [["node", "$help_cmd_inventory"]], ["inventory"], 'do_link]>, ".", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "The second form allows you to move objects from an alternate location to your inventory.", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_drop"]], ["drop"], 'do_link]>], #[['links, #[["inventory", "$help_cmd_inventory"], ["drop", "$help_cmd_drop"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["inventory", $help_cmd_inventory], ["drop", $help_cmd_drop]];
+var $root created_on = 870926521;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_get];
+var $root manager = $help_cmd_get;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_give.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_give: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "give|put", "give|put"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["give|put <thing> to|in <thing>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows you to transfer an object between your ", <$format, ["link", [["node", "$help_cmd_inventory"]], ["inventory"], 'do_link]>, " and another object, or between one object and another. In the case of users, you can not transfer one user to another, only objects can be transfered into a user.", <$format, ["p", [], [], 'do_p]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_get"]], ["get"], 'do_link]>, ", ", <$format, ["link", [["node", "$help_cmd_drop"]], ["drop"], 'do_link]>], #[['links, #[["inventory", "$help_cmd_inventory"], ["get", "$help_cmd_get"], ["drop", "$help_cmd_drop"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["inventory", $help_cmd_inventory], ["get", $help_cmd_get], ["drop", $help_cmd_drop]];
+var $root created_on = 877822514;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_give];
+var $root manager = $help_cmd_give;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_grep.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_grep: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@grep", "@grep"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@grep [options] <regexp> <object> <object>..."], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows you to search through the database for items matching the ", <$format, ["link", [["node", "$help_coldc_regexp"]], ["regexp"], 'do_link]>, ". Depending on the options selected, <object> may be either the root object to start searching from, or one (or more) of the indivdual objects to search. ", <$format, ["np", [], [], 'do_np]>, " Options can be: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+d?escend"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Start searching from the following <object> and work down it's descendants list."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+f?ull"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists the method <regexp> was found in, as well as the line that contains the <regexp>."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+l?ist"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Lists the methods the <regexp> was found in."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+r?eplace-with=<text>"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["Text to replace item matched by <regexp> with."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The following example will search through the database, starting with the $root object, and progress down it's descendants list searching for .tell. The numbers following the method names, are the line numbers within those methods that contain the <regexp>: ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@grep +d .tell $root\nSearching for \".tell\"...\n$root.uninit_root(): 25\n$root.initialize(): 16, 22 and 23\n$root.uninitialize(): 16, 17, 18, 27, 28, 30, 31, 32, 45, 46, 47, 55, 56, 57, 58 and 59\n$root.add_method(): 15\n$root.debug(): 12\n..\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Caution: It is advised that you don't descend from $root very often, as this tends to lag the server."], #[['links, #[["regexp", "$help_coldc_regexp"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["regexp", $help_coldc_regexp]];
+var $root created_on = 870647047;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_grep];
+var $root manager = $help_cmd_grep;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_inventory.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_inventory: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "inventory", "inventory"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["i?nventory"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Displays your name, your ", <$format, ["link", [["node", "$help_cmd_describe"]], ["description"], 'do_link]>, ", your state, and the contents of what your user is carrying. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">inventory\nVampire\nAn insane, poorly spelling creature.\nHe is wearing Cloak.\nHe is awake.\nHe is holding:\n        UI_stuff\n        parser\n        big birthday cake\n        list_of_places\nVampire's eyes do not glow from mojo.\n"], 'do_quote]>], 'do_dfn]>], #[['links, #[["description", "$help_cmd_describe"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["description", $help_cmd_describe]];
+var $root created_on = 870926540;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_inventory];
+var $root manager = $help_cmd_inventory;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_kick.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_kick: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@kick", "@kick"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["ADMIN COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@kick <user>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command destroys all of a user's current login connections, effectively disconnecting them from the server."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878512086;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_kick];
+var $root manager = $help_cmd_kick;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_look.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_look: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "look|examine", "look|examine"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["look|examine <location | object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command displays your current surroundings including the description and contents of the location; or the description and contents of the object you are looking at."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926567;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_look];
+var $root manager = $help_cmd_look;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_managed.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_managed: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@managed", "@managed"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: '", <$format, ["tt", [], ["@managed [object]"], 'do_tt]>, "' ", <$format, ["np", [], [], 'do_np]>, "Lists all the objects managed by the argument."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926041;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_managed];
+var $root manager = $help_cmd_managed;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_manager.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_manager: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@manager", "@manager"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: '", <$format, ["tt", [], ["@manager [object]"], 'do_tt]>, "' ", <$format, ["np", [], [], 'do_np]>, "Show the object's manager. The default object is the one in context."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926068;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_manager];
+var $root manager = $help_cmd_manager;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_map.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_map: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@map", "@map"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: ", <$format, ["tt", [], ["@map"], 'do_tt]>, " ", <$format, ["np", [], [], 'do_np]>, "@map shows you your surroundings, if the current room or realm recognize them. See ", <$format, ["link", [["node", "$help_obj_generic_map"]], ["Generic Map"], 'do_link]>, " for more information."], #[['links, #[["Generic Map", "$help_obj_generic_map"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["Generic Map", $help_obj_generic_map]];
+var $root created_on = 870926082;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_map];
+var $root manager = $help_cmd_map;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_mcp_upload.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_mcp_upload: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@mcp-upload-session", "@mcp-upload-session"];
+var $help_node body = <$ctext_frob, [["This command is used in conjunction with the MCP editor, and should not normally be called by a user."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 877037992;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_mcp_upload];
+var $root manager = $help_cmd_mcp_upload;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_monitor.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_monitor: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@monitor", "@monitor"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@monitor [on | off]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command turns on and off monitoring of actions, and spoofs. If you have monitoring turned on, you can see what, if anything has been spoofed, by simply doing @monitor without any arguments. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [["ind", "3"]], [<$format, ["quote", [], [">@monitor\n$user_bruce (Bruce)  $courtyard.announce() line 9   Bruce says, \"it does...\n$vampire (Vampire)   $courtyard.announce() line 9   Vampire says, \"bah\"\n$vampire (Vampire)   $courtyard.announce() line 9   Vampire doesn't like...\n0                    $courtyard.announce() line 9   <$message_frob, #[[\"gene...\n"], 'do_quote]>], 'do_dfn]>], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926114;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_monitor];
+var $root manager = $help_cmd_monitor;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_name_templates.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_name_templates: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@name-templates|@templates", "@name-templates|@templates"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878186751;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_name_templates];
+var $root manager = $help_cmd_name_templates;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_quota.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_quota: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@quota", "@quota"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, "Syntax: ", <$format, ["tt", [], ["@quota <object> to <any:+e?xempt>"], 'do_tt]>, <$format, ["p", [], [], 'do_p]>, "This command sets an objects quota to either a numeric amount or exempt or non-exempt."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 887772510;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_quota];
+var $root manager = $help_cmd_quota;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_quote.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_quote: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "quote", "quote"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "This interaction command allows you to quote (without any substition by the system) a line of text. It can also be used via the '|' shortcut. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Examples:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">quote Brandon giggles like a little schoolgirl.\nVampire | Brandon giggles like a little schoolgirl.\n\n>|Brandon beats Vampire with a wet noddle.\nVampire | Brandon beats Vampire with a wet noddle.\n"], 'do_quote]>], 'do_dfn]>], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 874182075;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_quote];
+var $root manager = $help_cmd_quote;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_register_name.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_register_name: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@register|@unregister|@register-name|@unregister-name", "@register|@unregister|@register-name|@unregister-name"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [["nobound", 1]], ["Syntax: ", <$format, ["tt", [], ["@register <name>"], 'do_tt]>], 'do_dfn]>, " ", <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@unregister <name>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@register adds a name to the registation database that can optioally identify your character. @unregister removes a name from the database. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@register HelpGod\nRegistered alternate name \"HelpGod\".\nRegistered names: Vamp and Vampire, HelpGod.\n"], 'do_quote]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@unregister HelpGod\nUnregistered alternate name \"HelpGod\".\nRegistered names: Vamp and Vampire.\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_registered"]], ["@registered"], 'do_link]>, "."], #[['links, #[["@registered", "$help_cmd_registered"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@registered", $help_cmd_registered]];
+var $root created_on = 878186871;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_register_name];
+var $root manager = $help_cmd_register_name;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_registered.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_registered: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@registered", "@registered"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@registered"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Shows all names currently registered by your character. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@registered\nRegistered names: Vamp and Vampire.\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_register_name"]], ["@register|@unregister"], 'do_link]>, "."], #[['links, #[["@register|@unregister", "$help_cmd_register_name"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@register|@unregister", $help_cmd_register_name]];
+var $root created_on = 878186815;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_registered];
+var $root manager = $help_cmd_registered;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_remembered.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_remembered: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@remembered", "@remembered"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@remembered"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Displays the objects you ", <$format, ["link", [["node", "$help_cmd_remember"]], ["@remember"], 'do_link]>, " and the names that you have given them. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@remembered\nRemembered Items:\n  goofy is $user_gorren (Gorren)\n"], 'do_quote]>], 'do_dfn]>], #[['links, #[["@remember", "$help_cmd_remember"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@remember", $help_cmd_remember]];
+var $root created_on = 874198526;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_remembered];
+var $root manager = $help_cmd_remembered;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_status.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_status: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@status", "@status"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@status [+cache]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Displays technical information about the driver and core. The available driver information may vary, depending upon what the operating system provides. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@status\n--- the Cold Dark status report ---\nSystem is:        clean, will skip backup.\nSystem lag:       0.0\nNext dbref:       #47968\nDriver:           Cold Genesis 1.1p0-STABLE\nCore:             ColdCore 3.0a9.02\nStarted:          2 days, 4 hours, 49 minutes and 3 seconds ago\nBackup:     last: 20 minutes ago\n            next: 40 minutes from now\n        interval: 1 hour\nCPU time used:    user: 3 minutes, 52 seconds and 399 milliseconds\n                  system: 49 seconds and 478 milliseconds\nPage:             57742 reclaims 807 faults\nContext switches: 114616 voluntary 8071 involuntary\nSignals:          53\n---"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "In addition, administrators may specify the option ", <$format, ["tt", [], ["+cache"], 'do_tt]>, " to receive a visual map of the object cache in memory. An example of what it may look like is: ", <$format, ["dfn", [], [<$format, ["quote", [], ["\nCache Size: 61x10\nCache Map (Horizontal):\n +--------------------------- WIDTH ---------------------------\nD|A.A.....I...........aa...................a.....A.......I.....\nE|......................I...................................II.\nP|..................I...........................I..............\nT|......I.........I.............................I..............\nH|...........I....II..............I.....I......................\n |.............I....I..........................................\n |................... ............. ..........  ......... .....\n |.... ....I... .....  ...........  ..........  ......... .....\n |...   ....... .....      ... ...  I.........   .......   ....\n |.      ...  . ..  .           .   ..            .. .     ....\n +-------------------------------------------------------------"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If the width of the cache is too wide to fit the screen, it will be displayed vertically instead of horizontally. In the map the character '", <$format, ["tt", [], ["a"], 'do_tt]>, "' represents an active object. If it is capitalized it represents an active dirty object. If it is a capital '", <$format, ["tt", [], ["I"], 'do_tt]>, "' it represents an inactive dirty object. Periods represent inactive clean objects which will not have to be written to disk. Keep in mind that an active object is only in reference to those used in the current task--that being the task which is displaying the cache map."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926275;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_status];
+var $root manager = $help_cmd_status;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_trace.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_trace: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@trace-method|@trace", "@trace-method|@trace"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@trace-method|@trace <method>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command allows a programmer to find out where a method ", <$format, ["link", [["node", "$help_func_pass"]], ["pass()"], 'do_link]>, "'s to. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, " ", <$format, ["dfn", [], [<$format, ["quote", [], [">@trace .name\nMethod trace of $vampire.name():\n ----    6 $root.name([args])\n ----   55 $has_name.name([args])\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The first method listed is the top level method to which @trace was able to go back too. Following it, is each method farther away, until it can find no other matches."], #[['links, #[["pass()", "$help_func_pass"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["pass()", $help_func_pass]];
+var $root created_on = 870647128;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_trace];
+var $root manager = $help_cmd_trace;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_trusted.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_trusted: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@trusted-by", "@trusted-by"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878186919;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_trusted];
+var $root manager = $help_cmd_trusted;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_trusts.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_trusts: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@trusts|@trustees", "@trusts|@trustees"];
+var $help_node body = <$ctext_frob, [["This node isn't written yet"], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 878186951;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_trusts];
+var $root manager = $help_cmd_trusts;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_undefsetting.cdc	Sat Mar 14 15:49:21 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_undefsetting: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@undef-setting|@undefine-setting", "@undef-setting|@undefine-setting"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, <$format, ["b", [], ["PROGRAMMER COMMAND"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@undef-setting|@undefine-setting <definer>:<setting>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Removes the <setting> from the object represented by <definer>. ", <$format, ["np", [], [], 'do_np]>, "See also: ", <$format, ["link", [["node", "$help_cmd_defsetting"]], ["@define-setting"], 'do_link]>], #[['links, #[["@define-setting", "$help_cmd_defsetting"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@define-setting", $help_cmd_defsetting]];
+var $root created_on = 870647179;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_undefsetting];
+var $root manager = $help_cmd_undefsetting;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_walk.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_walk: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "walk|go", "walk|go"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["walk|go <direction>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This is a basic movement command which is rarely used due to exits having builtin shortcuts which effectively call this command when you enter the exit's name."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 877822538;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_walk];
+var $root manager = $help_cmd_walk;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_whereis.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_whereis: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@whereis|@where-is", "@whereis|@where-is"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Syntax: `", <$format, ["tt", [], ["@where-is <user>[,<user>...]"], 'do_tt]>, " ", <$format, ["np", [], [], 'do_np]>, "The command prints out the location of each user in the list. It only prints the realm, not the exact room."], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926362;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_whereis];
+var $root manager = $help_cmd_whereis;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_who.cdc	Sat Mar 14 15:49:22 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_who: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@who", "@who"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@who [<player>] | [<option>]"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This command in it's default form lists all users currently connected to the system. The @who listing can be used to show specific information based on weather a player's name, or an option is used. ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@who\n--- Connected Users (1) ---\nName      On for  Location\n----      ------  --------\nVampire   2 days  Solar System (NASA, Space Wing)\n"], 'do_quote]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, " ", <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@who +admin\n--- Connected Admins (4) ---\nName     On for   Idle    Location\n----     ------   ----    --------\nVampire  10 days          Nowhere (<Creation>)\nBrad     3 days   22 hrs  the Courtyard (Caislea'n, Taobh Thiar)\nVang     19 hrs   7 hrs   the Courtyard (Caislea'n, Taobh Thiar)\nScott    5 hrs    2 hrs   the Courtyard (Caislea'n, Taobh Thiar)\n---\n"], 'do_quote]>], 'do_dfn]>, " ", <$format, ["np", [], [], 'do_np]>, " Options can be: ", <$format, ["dfn", [["nobound", 1], [" ", 1], ["ind", "4"]], [<$format, ["table", [["cols", "30%,70%"]], [<$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+admin"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["List only connected admins."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+prog"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["List only connected programmers."], 'do_td]>], 'do_tr]>, <$format, ["tr", [], [<$format, ["td", [], [<$format, ["tt", [], ["+short"], 'do_tt]>], 'do_td]>, <$format, ["td", [], ["List all users in short form."], 'do_td]>], 'do_tr]>], 'do_table]>], 'do_dfn]>], #[]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[];
+var $root created_on = 870926371;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_who];
+var $root manager = $help_cmd_who;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_writers.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_writers: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@writers", "@writers"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@writers <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@writers displays who or what can write on the object. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@writers $login_connection_32167\n$login_connection_32167 is writable by:\n#  Name                         Flags   Size   Manager\n18 $login_daemon                *-mvc   815    $login_daemon\n18 $login_interface             *-mvcC  6211   $login_interface\n18 $login_connection            *-mvc   902    $login_connection\n49 $vampire (Vampire)           -----   10374  $vampire (Vampire)\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_writes"]], ["@writes"], 'do_link]>, "."], #[['links, #[["@writes", "$help_cmd_writes"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@writes", $help_cmd_writes]];
+var $root created_on = 878187025;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_writers];
+var $root manager = $help_cmd_writers;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_cmd_writes.cdc	Sat Mar 14 15:49:23 1998
@@ -0,0 +1,15 @@
+
+new object $help_cmd_writes: $help_cmds;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "@writes", "@writes"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], ["Syntax: ", <$format, ["tt", [], ["@writes <object>"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@writes displays what may write to the object. ", <$format, ["np", [], [], 'do_np]>, <$format, ["b", [], ["Example:"], 'do_b]>, <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], [">@writes $vampire\nVampire ($vampire) is a writer for:\n#  Name                         Flags   Size   Manager\n3  $user_robota (Robot-A)       -----   1286   $user_robota (Robot-A)\n6  $login_connection_32167      -----   393    $login_connection\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "See also: ", <$format, ["link", [["node", "$help_cmd_writers"]], ["@writers"], 'do_link]>], #[['links, #[["@writers", "$help_cmd_writers"]]]]]>;
+var $help_node index = $help_index_cmds;
+var $help_node links = #[["@writers", $help_cmd_writers]];
+var $root created_on = 878187051;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_cmd_writes];
+var $root manager = $help_cmd_writes;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_copyright.cdc	Sat Mar 14 15:49:19 1998
@@ -0,0 +1,15 @@
+
+new object $help_copyright: $help_credit;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "COPYRIGHT", "COPYRIGHT"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdCore is authored by many people, and is Copyright 1994-1998 by Brandon Gillespie, unless otherwise stated on a specific method or object. ", <$format, ["np", [], [], 'do_np]>, "The following terms apply to all objects associated with ColdCore unless explicitly disclaimed. ", <$format, ["np", [], [], 'do_np]>, "The authors hereby grant permission to use, copy, modify, distribute, and license this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. Notices must be displayed or provided as appropriate, to avoid mis-representation when alterations and personal enhancements are made to the core. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated on each object or method where they apply. ", <$format, ["np", [], [], 'do_np]>, "IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ", <$format, ["np", [], [], 'do_np]>, "THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."], #[]]>;
+var $help_node index = $help_index_core;
+var $help_node links = #[];
+var $root created_on = 887776128;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_copyright];
+var $root manager = $help_copyright;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_credit.cdc	Sat Mar 14 15:49:19 1998
@@ -0,0 +1,15 @@
+
+new object $help_credit: $help_coldcore;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Credit", "Credit"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "ColdCore is authored by many people. Although most if not all of the core has been rewritten from its origins in Cold World, the following is a list of primary contributors from the beginning--in alphabetical order: ", <$format, ["dfn", [], [<$format, ["ul", [], [<$format, ["li", [], ["Jeff Bellgarde"], 'do_li]>, <$format, ["li", [], ["Robert de Forest"], 'do_li]>, <$format, ["li", [], ["Brandon Gillespie"], 'do_li]>, <$format, ["li", [], ["Greg Hudson"], 'do_li]>, <$format, ["li", [], ["Wyatt Miler"], 'do_li]>, <$format, ["li", [], ["Bruce Mitchener"], 'do_li]>, <$format, ["li", [], ["Brad Roberts"], 'do_li]>, <$format, ["li", [], ["Miroslav Silovic"], 'do_li]>, <$format, ["li", [], ["Alex Stewart"], 'do_li]>], 'do_ul]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "In addition, the following people may have--in some way or another--also helped with ColdCore:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["Jon Lambert, Brian Buchanan, Ken Brush, Ted Kanzinsky, Jeff Kesselman, Dancer, Jordan Baker, Colin McCormack."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Because Copyrights must be held by a legal entity, the ", <$format, ["link", [["node", "$help_copyright"]], ["COPYRIGHT for ColdCore"], 'do_link]>, " is held by Brandon Gillespie."], #[['links, #[["COPYRIGHT for ColdCore", "$help_copyright"]]]]]>;
+var $help_node index = $help_index_core;
+var $help_node links = #[["COPYRIGHT for ColdCore", $help_copyright]];
+var $root created_on = 887776030;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_credit];
+var $root manager = $help_credit;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_func_cache_info.cdc	Sat Mar 14 15:49:15 1998
@@ -0,0 +1,15 @@
+
+new object $help_func_cache_info: $help_funcs_sys;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "cache_info()", "cache_info()"];
+var $help_node body = <$ctext_frob, [[<$format, ["dfn", [], [<$format, ["tt", [], [<$format, ["i", [], ["LIST"], 'do_i]>, " cache_info()"], 'do_tt]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "This administrative function returns a visual map of the active memory cache for database objects. The list returned will have three elements, where each element is:", <$format, ["p", [], [], 'do_p]>, <$format, ["ol", [], [<$format, ["li", [], ["Cache Width (INT)"], 'do_li]>, <$format, ["li", [], ["Cache Depth (INT)"], 'do_li]>, <$format, ["li", [], ["Cache Map (LIST)"], 'do_li]>], 'do_ol]>, <$format, ["np", [], [], 'do_np]>, "The Cache Map is a list of strings containing a single character entry for each point in the cache (where the list is ", <$format, ["i", [], ["width"], 'do_i]>, " wide, and there are ", <$format, ["i", [], ["depth"], 'do_i]>, "). The characters can be a lower or uppercase ", <$format, ["tt", [], ["i"], 'do_tt]>, " or ", <$format, ["tt", [], ["a"], 'do_tt]>, ". The character ", <$format, ["tt", [], ["a"], 'do_tt]>, " refers to active objects and the character ", <$format, ["tt", [], ["i"], 'do_tt]>, " refers to inactive objects. If it is capitalized, the object is marked dirty."], #[]]>;
+var $help_node index = $help_index_function;
+var $help_node links = #[];
+var $root created_on = 879897889;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_func_cache_info];
+var $root manager = $help_func_cache_info;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_command_cache.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,15 @@
+
+new object $help_obj_command_cache: $help_sys_parser;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Command Cache", "Command Cache"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "The $command_cache object is broken into two roles--caching commands, and interfacing the cache for commands (this primarily involves looking up commands in the cache)--or from another viewpoint, the Cache Server and Cache Client (respectively). While any object will always cache its own locally defined commands (those immedately defined on itself), an object has to be specially marked to cache all commands on itself and its ancestors. These objects are generally the parent class for users. Most other objects (primarily Command Modules) should only have locally defined commands. ", <$format, ["subj", [["level", "2"]], ["Cache Server"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "If an object is a Cache Server, it will also fall into one of two Cache Server categories. EIther it is a cache for its own commands (a Local Cache), or it is a cache for all commands defined on its ancestors and itself (a General Cache). ", <$format, ["np", [], [], 'do_np]>, "The default behavior of a Cache Server is as a Local Cache. To configure an object as a General Cache, simply add the flag 'general_cache to the object, using the command @chmod:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@chmod +general_cache $new_cache_server"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Keep in mind, an object only needs to be marked as a general cache if it needs to cache not only its own commands, but also those commands defined on its ancestors. This is generally not the case. ", <$format, ["subj", [["level", "2"]], ["Cache Client"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "A cache client will lookup commands on all of its parents--which should be defined as General Caches, and on any of its Command Modules. Command Modules are objects which group a set of commands, allowing people to add or remove entire sets of commands, depending upon the interface they desire. ", <$format, ["subj", [["level", "2"]], ["Remote Command Cache"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "An additional cache has been created that is not intended for use as an ancestor. Instead, it is intended as the general repository for all remote commands. It behaves slightly different than standard caches, and plays the role as both the client and server for itself. ", <$format, ["subj", [["level", "2"]], ["Method Definitions"], 'do_subj]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "$help_obj_command_cache_dmeths"]], ["Creation and Destruction Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_obj_command_cache_smeths"]], ["Cache Server Methods"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "$help_obj_command_cache_cmeths"]], ["Cache Client Methods"], 'do_link]>], 'do_li]>], 'do_ul]>], #[['links, #[["Creation and Destruction Methods", "$help_obj_command_cache_dmeths"], ["Cache Server Methods", "$help_obj_command_cache_smeths"], ["Cache Client Methods", "$help_obj_command_cache_cmeths"]]]]]>;
+var $help_node index = $help_index_objects;
+var $help_node links = #[["Creation and Destruction Methods", $help_obj_command_cache_dmeths], ["Cache Server Methods", $help_obj_command_cache_smeths], ["Cache Client Methods", $help_obj_command_cache_cmeths]];
+var $root created_on = 887836027;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_command_cache];
+var $root manager = $help_obj_command_cache;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_command_cache_cmeths.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,14 @@
+
+new object $help_obj_command_cache_cmeths: $help_obj_command_cache;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Client Methods", "Client Methods"];
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [["ind", "8"]], [<$format, ["dt", [], [".", <$format, ["method", [["command_cache.cache_client_init", 1]], ["cache_client_init"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Must be called before the client can lookup commands."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.cache_client_uninit", 1]], ["cache_client_uninit"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Called when the client will stop looking up commands (e.g. the user logs out)."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.match_shortcut", 1]], ["match_shortcut"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Used to lookup a shortcut in any of the client's Cache Servers. Returns either zero if no shortcuts are found, or a list where the first element is ", <$format, ["tt", [], ["'shortcut"], 'do_tt]>], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.match_command", 1]], ["match_command"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Used to lookup a command in any of the client's Cache Servers. Returns either zero if no matches are found, or a list where the first element is either ", <$format, ["tt", [], ["'partial"], 'do_tt]>, " or ", <$format, ["tt", [], ["'command"], 'do_tt]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.match_command", 1]], ["match_remote_command"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Used by $remote_cache to lookup a command in the remote cache. Returns either zero if no matches are found, or a list where the first element is either ", <$format, ["tt", [], ["'partial"], 'do_tt]>, " or ", <$format, ["tt", [], ["'remote"], 'do_tt]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.add_command_module", 1]], ["add_command_module"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Add a command module to the client."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.del_command_module", 1]], ["del_command_module"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Remove a command module from the client."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.command_modules", 1]], ["command_modules"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["List the command modules used by the client."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node links = #[];
+var $root created_on = 887946512;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_command_cache_cmeths];
+var $root manager = $help_obj_command_cache_cmeths;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_command_cache_dmeths.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,14 @@
+
+new object $help_obj_command_cache_dmeths: $help_obj_command_cache;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Creation and Destruction Methods", "Creation and Destruction Methods"];
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [["ind", "8"]], [<$format, ["dt", [], [".", <$format, ["method", [["command_cache.uninit_command_cache", 1]], ["uninit_command_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Unlinks the cache client from any command module objects."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.core_command_cache", 1]], ["core_command_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Purges the cache when a core is extracted."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node links = #[];
+var $root created_on = 887946526;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_command_cache_dmeths];
+var $root manager = $help_obj_command_cache_dmeths;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_command_cache_smeths.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,14 @@
+
+new object $help_obj_command_cache_smeths: $help_obj_command_cache;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Server Methods", "Server Methods"];
+var $help_node body = <$ctext_frob, [[<$format, ["dl", [["ind", "8"]], [<$format, ["dt", [], [".", <$format, ["method", [["command_cache.cache_server_init", 1]], ["cache_server_init"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Called by cache clients to notify prepare the server for use. MUST be called before a server will function (and is called automatically when the client starts)."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.cache_server_uninit", 1]], ["cache_server_uninit"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Notifies the cache that one of its clients is going away. The server will do a cursory check and may purge its cache if it determines it is no longer needed."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.is_general_cache", 1]], ["is_general_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns true if the server is configured as a General Cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.purge_cache", 1]], ["purge_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Clears the command (and shortcut) cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.rehash_cache", 1]], ["rehash_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Builds the command (and shortcut) cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.add_object_to_cache", 1]], ["add_object_to_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Adds all commands defined on an object to the cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.add_to_cache", 1]], ["add_to_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Adds a command to the cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.del_from_cache", 1]], ["del_from_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Removes a command from the cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.shortcut_cache", 1]], ["shortcut_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the shortcut cache."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["command_cache.command_cache", 1]], ["command_cache"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the command cache."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node links = #[];
+var $root created_on = 887946512;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_command_cache_smeths];
+var $root manager = $help_obj_command_cache_smeths;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_generic_map.cdc	Sat Mar 14 15:49:24 1998
@@ -0,0 +1,16 @@
+
+new object $help_obj_generic_map: $help_obj;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Generic Map", "Generic Map"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Generic map is a simple note that contains a map of the room and its surroundings. While it can be described, it's not strictly necessary, you only need to edit the note's text for the desired effect. The map may be both wider and taller than the screen; in that case, only a part of the map will be displayed. The window to be displayed is configurable. ", <$format, ["subj", [["level", "3"]], ["Tracking the location"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, "You can embed pairs of numbers (example: ", <$format, ["tt", [], ["'00'"], 'do_tt]>, ") within the map. All such pairs will be replaced with spaces once the map is printed to the player, except the one that corresponds to the current location. To display that, set map-position on the current room. The map position specifies the window (the upper left corner of the part of the map you want to display), tag (the room tag that will be shown) and the generic map object that is used with the current room. Example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["> @set here:map-position=window 0, 0 tag 04 on $map_of_taobh_thiar"], 'do_dfn]>, " This sets the map of the current room to the $map_of_taobh_thiar; its tag to 04. Window (0,0) makes @map display the entire map. Finally, the portion of the $map_of_taobh_thiar for this room looks like:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["quote", [], ["\n                        \                   |     /     \ \n   Steam Tunnel 03    Steam Tunnel 04 Steam Tunnel 07   |\n                          \            /                |\n\n"], 'do_quote]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "@map in the Steam Tunnel will replace 04 with **, 03 and 07 will vanish from the map."], #[]]>;
+var $help_node group = 1;
+var $help_node index = $help_index_objects;
+var $help_node links = #[];
+var $root created_on = 874066987;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_generic_map];
+var $root manager = $help_obj_generic_map;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_robot.cdc	Sat Mar 14 15:49:24 1998
@@ -0,0 +1,15 @@
+
+new object $help_obj_robot: $help_obj;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Robot|@reactions|@activate-reaction|@deactivate-reaction|@add-reaction", "Robot|@reactions|@activate-reaction|@deactivate-reaction|@add-reaction"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "$robot is an object for generic puppet type things. It can have reactions defined on it to respond to events in it's environment.", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Commands"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], ["@reactions <this>"], 'do_dt]>, <$format, ["dd", [], ["Lists information about the reactions defined on ", <$format, ["var", [], ["this"], 'do_var]>, ". An asterisk in the left margin means that the reaction is activated. The numbers given here may be used by @activate-reaction and @deactivate-reaction."], 'do_dd]>, <$format, ["dt", [], ["@activate-r?eaction|@ar <number> on <this>"], 'do_dt]>, <$format, ["dd", [], ["Activates the reaction ", <$format, ["var", [], ["number"], 'do_var]>, " on the robot ", <$format, ["var", [], ["this"], 'do_var]>, ". The number may be found by looking at @reactions ", <$format, ["var", [], ["this"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], ["@deactivate-r?eaction|@dr <number> on <this>"], 'do_dt]>, <$format, ["dd", [], ["Deactivates the reaction ", <$format, ["var", [], ["number"], 'do_var]>, " on the robot ", <$format, ["var", [], ["this"], 'do_var]>, ". The number may be found by looking at @reactions ", <$format, ["var", [], ["this"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], ["@add-r?eaction <any> to <any> on <this>"], 'do_dt]>, <$format, ["dd", [], ["Add a reaction with ", <$format, ["var", [], ["template"], 'do_var]>, " to ", <$format, ["var", [], ["hook"], 'do_var]>, " on ", <$format, ["var", [], ["this"], 'do_var]>, ". Options follow the template and are as follows: ", <$format, ["tt", [], ["+m?ethod"], 'do_tt]>, " Match the template with ", <$format, ["var", [], ["method"], 'do_var]>, ". Accepted values are regexp, pattern, and template. The default is regexp. ", <$format, ["tt", [], ["+t?ype"], 'do_tt]>, " Type of event to which to react. Valid values are tell to react to anything sent to .tell(), notell to react to everything not sent to .tell(), any to react to anything (inefficient and not recommended), or any social event (currently whisper, tosay, and remote). The default is tosay. ", <$format, ["tt", [], ["+c?hance"], 'do_tt]>, " Percent chance that the reaction will be triggered. ", <$format, ["tt", [], ["+ti?mes"], 'do_tt]>, " Number of times a reaction can be triggered before being deactivated. ", <$format, ["tt", [], ["+a?rgs"], 'do_tt]>, " Arguments to give to ", <$format, ["var", [], ["hook"], 'do_var]>, " after the match string, the output of the match method, and the sender. ", <$format, ["tt", [], ["+min"], 'do_tt]>, " Minimum delay before triggering reaction (default: 0). ", <$format, ["tt", [], ["+max"], 'do_tt]>, " Maximum delay before triggering reaction (default: same as min). If you wish to match any event of a given type, leave the template blank. If you give options, just don't specify a template at all. Otherwise, use \"\"."], 'do_dd]>, <$format, ["dt", [], ["@del-r?eaction <number> from|on <this>"], 'do_dt]>, <$format, ["dd", [], ["Delete reaction ", <$format, ["var", [], ["number"], 'do_var]>, " from robot ", <$format, ["var", [], ["this"], 'do_var]>, ", deactivating and unhooking if necessary."], 'do_dd]>], 'do_dl]>, <$format, ["subj", [["level", "3"]], [<$format, ["link", [["node", "$help_obj_robot_methods"]], ["Methods"], 'do_link]>], 'do_subj]>, " ", <$format, ["subj", [["level", "3"]], ["How do I use it?"], 'do_subj]>, <$format, ["p", [], [], 'do_p]>, <$format, ["ol", [], [<$format, ["li", [], ["Define the method to carry out the work of the response if needed. There are pre-defined utilty methods to help avoid this."], 'do_li]>, <$format, ["li", [], ["Call @add-reaction and define your reaction."], 'do_li]>, <$format, ["li", [], ["Call @activate-reaction to activate your new reaction."], 'do_li]>, <$format, ["li", [], ["Experiment and have fun."], 'do_li]>], 'do_ol]>, <$format, ["p", [], [], 'do_p]>], #[['links, #[["Methods", "$help_obj_robot_methods"]]]]]>;
+var $help_node index = $help_index_objects;
+var $help_node links = #[["Methods", $help_obj_robot_methods]];
+var $root created_on = 888050848;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_robot];
+var $root manager = $help_obj_robot;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_robot_methods.cdc	Sat Mar 14 15:49:24 1998
@@ -0,0 +1,15 @@
+
+new object $help_obj_robot_methods: $help_obj_robot;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Robot Methods", "Robot Methods"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Public Methods:", <$format, ["br", [], [], 'do_br]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["robot.parse_line", 1]], ["parse_line"], 'do_method]>, "(", <$format, ["var", [], ["line"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Accepts a line of text and treats it as if it had been typed by a user."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.tell", 1]], ["tell"], 'do_method]>, "(what, [", <$format, ["var", [], ["who"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Standard 'tell method for receiving input."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.event_notify", 1]], ["event_notify"], 'do_method]>, "(", <$format, ["var", [], ["event"], 'do_var]>, ", ", <$format, ["var", [], ["origin"], 'do_var]>, ", [", <$format, ["var", [], ["args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.startup", 1]], ["startup"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.active", 1]], ["active"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns a dictionary of the active reactions."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.activate_reaction", 1]], ["activate_reaction"], 'do_method]>, "(", <$format, ["var", [], ["id"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Given an ", <$format, ["var", [], ["id"], 'do_var]>, ", activates that reaction."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.tell_traceback", 1]], ["tell_traceback"], 'do_method]>, "([", <$format, ["var", [], ["args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.add_reaction", 1]], ["add_reaction"], 'do_method]>, "([", <$format, ["var", [], ["args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.del_reaction", 1]], ["del_reaction"], 'do_method]>, "(", <$format, ["var", [], ["id"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.reactions", 1]], ["reactions"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns a dictionary of all defined reactions."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.match_type", 1]], ["match_type"], 'do_method]>, "(", <$format, ["var", [], ["type"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.reactions_cmd", 1]], ["reactions_cmd"], 'do_method]>, "(", <$format, ["var", [], ["cmdstr"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ", ", <$format, ["var", [], ["this"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Command for listing information about the reactions on the robot."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.update_reaction", 1]], ["update_reaction"], 'do_method]>, "(", <$format, ["var", [], ["id"], 'do_var]>, ", ", <$format, ["var", [], ["part"], 'do_var]>, ", ", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.deactivate_reaction", 1]], ["deactivate_reaction"], 'do_method]>, "(", <$format, ["var", [], ["id"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Given an ", <$format, ["var", [], ["id"], 'do_var]>, ", deactivates that reaction."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.connected", 1]], ["connected"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["If the robot is active, returns true, otherwise false."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.connected_time", 1]], ["connected_time"], 'do_method]>, "([", <$format, ["var", [], ["args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.idle_time", 1]], ["idle_time"], 'do_method]>, "([", <$format, ["var", [], ["args"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.activate_reaction_cmd", 1]], ["activate_reaction_cmd"], 'do_method]>, "(", <$format, ["var", [], ["cmdstr"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ", ", <$format, ["var", [], ["int"], 'do_var]>, ", ", <$format, ["var", [], ["prep"], 'do_var]>, ", ", <$format, ["var", [], ["this"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Command for activating a reaction on the robot."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.deactivate_reaction_cmd", 1]], ["deactivate_reaction_cmd"], 'do_method]>, "(", <$format, ["var", [], ["cmdstr"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ", ", <$format, ["var", [], ["int"], 'do_var]>, ", ", <$format, ["var", [], ["prep"], 'do_var]>, ", ", <$format, ["var", [], ["this"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Command for deactivating a reaction on the robot."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.add_reaction_cmd", 1]], ["add_reaction_cmd"], 'do_method]>, "(", <$format, ["var", [], ["cmdstr"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ", ", <$format, ["var", [], ["str"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Command for adding a new reaction to the robot."], 'do_dd]>], 'do_dl]>, "Protected Methods:", <$format, ["br", [], [], 'do_br]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["robot.react_command", 1]], ["react_command:react_command"], 'do_method]>, "(", <$format, ["var", [], ["str"], 'do_var]>, ", ", <$format, ["var", [], ["match"], 'do_var]>, ", ", <$format, ["var", [], ["sender"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.react_subcmd", 1]], ["react_subcmd"], 'do_method]>, "(", <$format, ["var", [], ["str"], 'do_var]>, ", ", <$format, ["var", [], ["match"], 'do_var]>, ", ", <$format, ["var", [], ["sender"], 'do_var]>, ", ", <$format, ["var", [], ["cmd"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reactions", 1]], ["check_reactions"], 'do_method]>, "(", <$format, ["var", [], ["type"], 'do_var]>, ", ", <$format, ["var", [], ["str"], 'do_var]>, ", ", <$format, ["var", [], ["sender"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.update_active", 1]], ["update_active"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ", ", <$format, ["var", [], ["id"], 'do_var]>, ", ", <$format, ["var", [], ["value"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.remove_active", 1]], ["remove_active"], 'do_method]>, "(", <$format, ["var", [], ["key"], 'do_var]>, ", ", <$format, ["var", [], ["id"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.do_reaction", 1]], ["do_reaction"], 'do_method]>, "(", <$format, ["var", [], ["str"], 'do_var]>, ", ", <$format, ["var", [], ["match"], 'do_var]>, ", ", <$format, ["var", [], ["id"], 'do_var]>, ", ", <$format, ["var", [], ["sender"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], [], 'do_dd]>], 'do_dl]>, "Private Methods:", <$format, ["br", [], [], 'do_br]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_args", 1]], ["check_reaction_args"], 'do_method]>, "(", <$format, ["var", [], ["method"], 'do_var]>, ", ", <$format, ["var", [], ["template"], 'do_var]>, ", ", <$format, ["var", [], ["type"], 'do_var]>, ", ", <$format, ["var", [], ["chance"], 'do_var]>, ", ", <$format, ["var", [], ["times"], 'do_var]>, ", ", <$format, ["var", [], ["hook"], 'do_var]>, ", ", <$format, ["var", [], ["min"], 'do_var]>, ", ", <$format, ["var", [], ["max"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_hook", 1]], ["check_reaction_hook"], 'do_method]>, "(", <$format, ["var", [], ["hook"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_hook_method", 1]], ["check_reaction_hook_method"], 'do_method]>, "(", <$format, ["var", [], ["method"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_hook_args", 1]], ["check_reaction_hook_args"], 'do_method]>, "(", <$format, ["var", [], ["args"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_min", 1]], ["check_reaction_min"], 'do_method]>, "(", <$format, ["var", [], ["min"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_max", 1]], ["check_reaction_max"], 'do_method]>, "(", <$format, ["var", [], ["max"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_matchwith", 1]], ["check_reaction_matchwith"], 'do_method]>, "(", <$format, ["var", [], ["method"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_template", 1]], ["check_reaction_template"], 'do_method]>, "(", <$format, ["var", [], ["template"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_type", 1]], ["check_reaction_type"], 'do_method]>, "(", <$format, ["var", [], ["type"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_chance", 1]], ["check_reaction_chance"], 'do_method]>, "(", <$format, ["var", [], ["chance"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["robot.check_reaction_times", 1]], ["check_reaction_times"], 'do_method]>, "(", <$format, ["var", [], ["times"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Type checking method."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node index = $help_index_objects;
+var $help_node links = #[];
+var $root created_on = 888050905;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_robot_methods];
+var $root manager = $help_obj_robot_methods;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_time.cdc	Sat Mar 14 15:49:24 1998
@@ -0,0 +1,15 @@
+
+new object $help_obj_time: $help_obj;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Time", "Time"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "$time is a general utility object for handling time values that don't deal specifically with the game's time system. Those issues are covered by ", <$format, ["link", [["node", "$help_obj_world_time"]], ["$world_time"], 'do_link]>, ".", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["time.format", 1]], ["format"], 'do_method]>, "(", <$format, ["var", [], ["format"], 'do_var]>, ", ", <$format, ["var", [], ["time"], 'do_var]>, ") ", <$format, ["i", [], ["native"], 'do_i]>], 'do_dt]>, <$format, ["dd", [], ["Given a format string, ", <$format, ["var", [], ["format"], 'do_var]>, " and a time in seconds, ", <$format, ["var", [], ["time"], 'do_var]>, ", returns the formatted time string. For now, revert to a man page for strftime for help on the format string."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["time.elapsed", 1]], ["elapsed"], 'do_method]>, "(", <$format, ["var", [], ["time"], 'do_var]>, ", [", <$format, ["var", [], ["flag"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Given a time ", <$format, ["var", [], ["time"], 'do_var]>, ", it returns the time between now and then. ", <$format, ["var", [], ["flag"], 'do_var]>, " controls how it is formatted. 'long will return it in the manner of .", <$format, ["method", [["time.to_english", 1]], ["to_english"], 'do_method]>, "(), while the default value, 'stopwatch, will return it as HH:MM:SS"], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["time.dhms", 1]], ["dhms"], 'do_method]>, "(", <$format, ["var", [], ["secs"], 'do_var]>, ", [", <$format, ["var", [], ["long"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Given a time, ", <$format, ["var", [], ["time"], 'do_var]>, ", it returns the number of days OR hours OR minutes OR seconds, which ever unit fits roughly. If the flag ", <$format, ["var", [], ["long"], 'do_var]>, " is true, it uses the full name of the unit of time."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["time.from_english", 1]], ["from_english"], 'do_method]>, "(", <$format, ["var", [], ["string"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Returns the number of seconds represented by the english description of time in the argument ", <$format, ["var", [], ["string"], 'do_var]>, ". This just defers to $world_time.", <$format, ["method", [["world_time.from_english", 1]], ["from_english"], 'do_method]>, "()."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["time.to_english", 1]], ["to_english"], 'do_method]>, "(", <$format, ["var", [], ["time"], 'do_var]>, ", [", <$format, ["var", [], ["reftime"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Given a number of seconds, ", <$format, ["var", [], ["time"], 'do_var]>, ", and an optional reference time, ", <$format, ["var", [], ["reftime"], 'do_var]>, ", which defaults to the current time, will return a string representing the time in English. This method attempts to take the varying number of days in a month and also leap years into account. NOTE: The results of this method when fed into .", <$format, ["method", [["time.from_english", 1]], ["from_english"], 'do_method]>, "(), will NOT return the original integer due to the lack of compensation for the things this method accounts for: the leap years, number of days in a month, etc."], 'do_dd]>], 'do_dl]>], #[['links, #[["$world_time", "$help_obj_world_time"]]]]]>;
+var $help_node index = $help_index_objects;
+var $help_node links = #[["$world_time", $help_obj_world_time]];
+var $root created_on = 887988392;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_time];
+var $root manager = $help_obj_time;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_obj_world_time.cdc	Sat Mar 14 15:49:24 1998
@@ -0,0 +1,15 @@
+
+new object $help_obj_world_time: $help_obj;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "World Time", "World Time"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "$world_time contains methods relating to time-handling on a world wide basis. Parts of it need upgrading for a more complex world, like ", <$format, ["method", [["world_time.current_season", 1]], ["current_season"], 'do_method]>, " to handle having a north and south hemisphere with opposite seasons.", <$format, ["p", [], [], 'do_p]>, <$format, ["subj", [["level", "3"]], ["Methods"], 'do_subj]>, <$format, ["dl", [], [<$format, ["dt", [], [".", <$format, ["method", [["world_time.from_english", 1]], ["from_english"], 'do_method]>, "(", <$format, ["var", [], ["string"], 'do_var]>, ", [", <$format, ["var", [], ["units"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Given an english description of a length of time as a ", <$format, ["var", [], ["string"], 'do_var]>, ", it returns the number of seconds that time represents."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.local_time", 1]], ["local_time"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the number of 'world seconds' since the world-time started."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.daytime", 1]], ["daytime"], 'do_method]>, "(", <$format, ["var", [], ["zone"], 'do_var]>, ", ", <$format, ["var", [], ["dayscale"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Returns a list of three elements. First is the number of hours into the day. Second is a symbol for the part of day it is, 'night, 'predawn, 'dawn, etc. Third is either 'day or 'night depending on the time of day."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.current_season", 1]], ["current_season"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns a string for the current season."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.from_unit_list", 1]], ["from_unit_list"], 'do_method]>, "(", <$format, ["var", [], ["time"], 'do_var]>, ", ", <$format, ["var", [], ["ulist"], 'do_var]>, ")"], 'do_dt]>, <$format, ["dd", [], ["Given a number of seconds, ", <$format, ["var", [], ["time"], 'do_var]>, ", and a list of indexes into the time_units, ", <$format, ["var", [], ["ulist"], 'do_var]>, ", return an english string representing the time."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.parse_unit", 1]], ["parse_unit"], 'do_method]>, "(", <$format, ["var", [], ["unit"], 'do_var]>, ", [", <$format, ["var", [], ["units"], 'do_var]>, "])"], 'do_dt]>, <$format, ["dd", [], ["Returns the entry in time_units for the unit given by ", <$format, ["var", [], ["unit"], 'do_var]>, "."], 'do_dd]>, <$format, ["dt", [], [".", <$format, ["method", [["world_time.time_units", 1]], ["time_units"], 'do_method]>, "()"], 'do_dt]>, <$format, ["dd", [], ["Returns the current units of time being used."], 'do_dd]>], 'do_dl]>], #[]]>;
+var $help_node index = $help_index_objects;
+var $help_node links = #[];
+var $root created_on = 887957184;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_obj_world_time];
+var $root manager = $help_obj_world_time;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_parser_command_modules.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,15 @@
+
+new object $help_parser_command_modules: $help_sys_parser;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Command Modules", "Command Modules"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Command Modules are a mechanism for extending command sets without adding new objects to a user's command heirarchy. Command Module objects must be a child of $user_interfaces. Commands on a Command Module must use sender() instead of this() to reference the user (as remote commands do). ", <$format, ["np", [], [], 'do_np]>, "To add a Command Module, type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@set command-modules=+$command_module"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Where ", <$format, ["tt", [], ["$command_module"], 'do_tt]>, " is the Object Name of the Command Module you are adding. You remove Command Modules in a similar manner, using the dash (", <$format, ["tt", [], ["-"], 'do_tt]>, ") character instead of the plus (", <$format, ["tt", [], ["+"], 'do_tt]>, ") character."], #[]]>;
+var $help_node index = $help_index_subsystem;
+var $help_node links = #[];
+var $root created_on = 889587644;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_parser_command_modules];
+var $root manager = $help_parser_command_modules;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/help_sys_parser.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,15 @@
+
+new object $help_sys_parser: $help_sys;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Command Parsing System|Command Parser", "Command Parsing System|Command Parser"];
+var $help_node body = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Brandon still has to write this. For now, reference:", <$format, ["p", [], [], 'do_p]>, <$format, ["ul", [], [<$format, ["li", [], [<$format, ["link", [["node", "help_obj_command_cache"]], ["Command Caches"], 'do_link]>], 'do_li]>, <$format, ["li", [], [<$format, ["link", [["node", "help_parser_command_modules"]], ["Command Modules"], 'do_link]>], 'do_li]>], 'do_ul]>], #[['links, #[["Command Caches", "help_obj_command_cache"], ["Command Modules", "help_parser_command_modules"]]]]]>;
+var $help_node index = $help_index_subsystem;
+var $help_node links = #[["Command Caches", $help_obj_command_cache], ["Command Modules", $help_parser_command_modules]];
+var $root created_on = 887832194;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$help_sys_parser];
+var $root manager = $help_sys_parser;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introductory_tutorial.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introductory_tutorial: $tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = [];
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "introductory", "introductory"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874248718;
+var $root flags = ['variables, 'methods, 'code, 'core, 'general_cache];
+var $root inited = 1;
+var $root managed = [$introductory_tutorial];
+var $root manager = $introductory_tutorial;
+var $root settings = #[["class", $user], ["start-topic", $introtut_start], ["map-position", 0], ["propagate", 0]];
+var $tutorial tracking = #[];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_communication.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,24 @@
+
+new object $introtut_communication: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["There are several ways of getting your message out, other than saying and emoting. This includes direct speech, thinking, and quoting. ", <$format, ["np", [], [], 'do_np]>, "To direct speech to another user in the same room, use \"to USER say TEXT\", or \"'user TEXT\". Like @page, you can direct speech to the last person you directed to or paged with two apostrophes (''). Try talking to yourself with", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["'", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " hello there."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "You can also use 'think' or '%' to put something in thought bubbles, just like old Spider-Man comics. Try this:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["%Don't worry, nobody can read your mind."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Sometimes it is useful to be able to quote something someone else said, or even paste a line of code from a program, without ambiguity introduced by quotation marks or people thinking you are emoting. To do this, use 'quote' or '|'. Often this is used when trying to explain to new users how to do something on ", <$generator, ["servname", [], [], 'gen_servname]>, ". As an example:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["|\"Hello world, I can say things now!"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "For further information on other communication commands (yes, there are more!), see the section ", <$format, ["link", [["node", "$help_interaction"]], ["Interaction"], 'do_link]>, " Commands."], #[['links, #[["Interaction", "$help_interaction"]]]]]>;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "More Ways to Communicate", "More Ways to Communicate"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874519394;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_communication];
+var $root manager = $introtut_communication;
+var $root settings = #[["prev-topic", $introtut_speaking], ["back-topic", $introtut_nonverbal], ["next-topic", $introtut_remote], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_desc.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_desc: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["As was just explained, all objects in your virtual environment have descriptions, including you. Most likely, you have the default description, which is 'You see nothing special'. It would be a good idea to change that description now, even if you're not sure what you want it to be. You can always change it again later. ", <$format, ["np", [], [], 'do_np]>, "Since you may not have looked at many other players, there are a few examples of users' descriptions here. Look at the graffiti to see them. ", <$format, ["np", [], [], 'do_np]>, "When you have decided on a description for yourself, you can set it with", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@describe me as \"Your Description Here\""], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Describing Yourself", "Describing Yourself"];
+var $location contents = [$introtut_user_graffiti];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177645;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_desc];
+var $root manager = $introtut_desc;
+var $root settings = #[["prev-topic", $introtut_moving], ["next-topic", $introtut_gender], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_end.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_end: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["This is the end of the Introductory Tutorial. More tutorials exist, which you may want to browse. To get a full list of tutorials type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@tutorial ?"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "To enter another tutorial specify it after the ", <$format, ["tt", [], ["@tutorial"], 'do_tt]>, " command. You must exit this tutorial first, by typing 'exit'. ", <$format, ["np", [], [], 'do_np]>, "This tutorial and the core tutorial code were written by Brandon Gillespie and Neale Pickett. The tutorial was based on a concept in Jay's House MOO (JHM), as was some of the original tutorial text."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Other Tutorials", "Other Tutorials"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874251255;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_end];
+var $root manager = $introtut_end;
+var $root settings = #[["prev-topic", $introtut_who], ["next-topic", ""], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_env.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_env: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Up to now you may have seen a few references to the Virtual Environment. This is a generic term applied to everything which exists in the same virtual location as you, including the location itself. When you want to look at something, it has to exist in your environment first (i.e. it has to be in the same place you are). ", <$format, ["np", [], [], 'do_np]>, "For instance, if you were in a place named The Courtyard, and in The Courtyard was a friend, a box and a bench--your environment would consist of The Courtyard, your friend, a box, a bench and yourself. ", <$format, ["np", [], [], 'do_np]>, "To learn more about your environment, type 'more'. Or, for later reference, you can get more information on your environment in the ", <$format, ["link", [["node", "$help_environment"]], ["Environment"], 'do_link]>, " help document."], #[['links, #[["Environment", "$help_environment"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Your Environment", "Your Environment"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874260896;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_env];
+var $root manager = $introtut_env;
+var $root settings = #[["prev-topic", $introtut_names], ["next-topic", $introtut_look], ["more-topic", $introtut_objs_env], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_gender.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_gender: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["You, as well as every other person in ", <$generator, ["servname", [], [], 'gen_servname]>, ", has a gender. If you look at yourself, you will see a phrase about being awake; the pronouns used are determined by your gender, which is most likely the default gender of 'neuter' (no gender). ", <$format, ["np", [], [], 'do_np]>, "To see a list of possible genders, type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@set gender"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "To set a gender from the list type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@set gender=GENDER"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "And then look at yourself (type 'look me'). ", <$format, ["np", [], [], 'do_np]>, "You can change your gender whenever you like; right now you should use @set gender to set yourself to the gender of your choice."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Gender", "Gender"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177645;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_gender];
+var $root manager = $introtut_gender;
+var $root settings = #[["prev-topic", $introtut_desc], ["next-topic", $introtut_speaking], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_help.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_help: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["One of the most important things to learn is how to use the help system. If you are familiar with the World Wide Web, you may recognize a hyperlink. Within a topic, references to help documents will be highlighted in some manner--these are known as links, or hyperlinks. How the link is highlighted will vary depending upon how you are browsing this tutorial. If you are connected through a terminal the link may be surrounded by square brackets ([]). If you are using html, it should be highlighted just like any other link. The following is a link to the main help page:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$format, ["link", [["node", "$help_coldcore"]], ["@help"], 'do_link]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Remember how it looks. When you see something which looks like it, you can type: '", <$format, ["tt", [], ["@help WORD"], 'do_tt]>, "' where WORD is the text. ", <$format, ["np", [], [], 'do_np]>, "If you want to explore how to use the help system further, type 'more'. Or, for later reference, you can get more information on all of the features of the help system, as well as a list of the abbreviations useful for easy navigation by typing:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@help help"], 'do_dfn]>], #[['links, #[["@help", "$help_coldcore"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooked = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Using the Help System", "Using the Help System"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874182968;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_help];
+var $root manager = $introtut_help;
+var $root settings = #[["prev-topic", $introtut_lines], ["next-topic", $introtut_objs], ["more-topic", $introtut_help_short], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_help_nav.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_help_nav: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["The server keeps track of what help nodes you have read, and you can go backwards and forwards in this history, using the less-than and greater-than signs in place of the link name, respectively. For instance, if you wanted to go back to the previous help node, you could simply type either of the following commands:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@help <", <$format, ["br", [], [], 'do_br]>, "?<"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "And to move forward again, you could type either of:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@help >", <$format, ["br", [], [], 'do_br]>, "?>"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "All of the other shortcuts and features are explained in detail, in the ", <$format, ["link", [["node", "$help_help"]], ["help options"], 'do_link]>, " documentation."], #[['links, #[["help options", "$help_help"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Help History", "Help History"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874290428;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_help_nav];
+var $root manager = $introtut_help_nav;
+var $root settings = #[["next-topic", $introtut_objs], ["prev-topic", $introtut_lines], ["back-topic", $introtut_help_short], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_help_short.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_help_short: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["For convenience, you can abbreviate the '@help' command to a single question mark, followed by the topic, such as:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["?LINK"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Which would be equivalent to:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@help LINK"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "You can also use a single question mark (without any LINK name) to view the current help node again (incase it has scrolled off your terminal). ", <$format, ["np", [], [], 'do_np]>, "To learn about your help navigation history, and how to traverse it, type 'more', or type 'back' to go back."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Help Shortcut", "Help Shortcut"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874289888;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_help_short];
+var $root manager = $introtut_help_short;
+var $root settings = #[["next-topic", $introtut_objs], ["prev-topic", $introtut_lines], ["back-topic", $introtut_help], ["more-topic", $introtut_help_nav], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_leaflet.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,20 @@
+
+new object $introtut_leaflet: $thing;
+
+var $described prose = <$ctext_frob, [["You see writing on the leaflet, which appears to be: ", <$format, ["np", [], [], 'do_np]>, "You have now looked at a room and at objects. If you look at a person you will find the description contains a lot more information. For an example, look at yourself using the command:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["look me"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "As you can see, more information is given. The name and description exist--like with other objects--but you also see the person's activity status. A person is asleep if they are not online, and if they are inactive (they have not typed anything for a while) the status will be something corresponding with how inactive they are, such as 'He is daydreaming' or 'She is long gone'. ", <$format, ["np", [], [], 'do_np]>, "You will also see a list of objects the user is carrying. You can look at these just as you looked at this leaflet in the mailbox, using one of the following commands:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["look at <object> on <player>", <$format, ["br", [], [], 'do_br]>, "look at <player>'s <object>"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If the person is an administrator, you will also see something about their system priviledges. By default, this is referred to as Mojo. Mojo is simply a representation of the administrator's system priviledges. If an administrator's Mojo is active, they have full system priviledges--if not, their priviledges are like any other programmers. ", <$format, ["np", [], [], 'do_np]>, "For more information, read the help documentation on the ", <$format, ["link", [["node", "$help_cmd_look"]], ["look"], 'do_link]>, " command."], #[['links, #[["look", "$help_cmd_look"]]]]]>;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['normal, "leaflet", "a leaflet"];
+var $located location = $introtut_mailbox;
+var $located obvious = 1;
+var $root created_on = 874177644;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_leaflet];
+var $root manager = $introtut_leaflet;
+var $thing gender = $gender_neuter;
+var $thing lock = <$object_lock_frob, [$introtut_mailbox]>;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_lines.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_lines: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["If text on your display is scrolling off the edge of the screen,", <$format, ["br", [], [], 'do_br]>, " you will need to find a means to wrap it. The preferred method is", <$format, ["br", [], [], 'do_br]>, " to use a special client designed for connecting to Virtual Community", <$format, ["br", [], [], 'do_br]>, " Servers. We suggest using Tinyfugue, or another similar client. More", <$format, ["br", [], [], 'do_br]>, " information on available clients can be found by typing:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@help clients"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Up to now in the tutorial, all lines have been pre-wrapped by the server.", <$format, ["br", [], [], 'do_br]>, " To determine if your text is wrapping or not, look at the following", <$format, ["br", [], [], 'do_br]>, " line which counts from one to fifty. ", <$format, ["np", [], [], 'do_np]>, "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 ", <$format, ["np", [], [], 'do_np]>, "If line wrapping is working for you, you should be able to see all", <$format, ["br", [], [], 'do_br]>, " numbers (although they will take two or more lines). If you only", <$format, ["br", [], [], 'do_br]>, " see one line, and it ends before 50, line wrapping is not working", <$format, ["br", [], [], 'do_br]>, " for you. If you cannot get a client to do line wrapping for you,", <$format, ["br", [], [], 'do_br]>, " you can set your content type as text/wrapped. This method is not", <$format, ["br", [], [], 'do_br]>, " suggested, as it is slower and you may have problems with some", <$format, ["br", [], [], 'do_br]>, " formatting. You can set your content type with the following command:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@set content-type=text/wrapped"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "All further topics will assume your client can word-wrap properly,", <$format, ["br", [], [], 'do_br]>, " or that you are using text/wrapped."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooked = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Line Wrapping", "Line Wrapping"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874185080;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_lines];
+var $root manager = $introtut_lines;
+var $root settings = #[["prev-topic", $introtut_start], ["next-topic", $introtut_help], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_look.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_look: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["All objects in ", <$generator, ["servname", [], [], 'gen_servname]>, " have a name and a description. Names are automatically displayed, but descriptions often are not. To see an object's description, you need to look at it with the 'look' command. ", <$format, ["np", [], [], 'do_np]>, "The look command can be used in two ways. If you specify something or somebody to look at, you will see that person or object's description. If you do not specify anything, you will see your current location's description (typing 'look here' is the same as simply typing 'look'). ", <$format, ["np", [], [], 'do_np]>, "If you type 'look' right now, you will see these instructions again, because they are the description of this room. The last line you see should be, \"You see a small mailbox here.\", because there is a mailbox in this room. Type 'look mailbox' now, and follow the instructions in its description."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Looking Around", "Looking Around"];
+var $location contents = [$introtut_mailbox];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177644;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_look];
+var $root manager = $introtut_look;
+var $root settings = #[["prev-topic", $introtut_names], ["next-topic", $introtut_moving], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_mailbox.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_mailbox: $in_location;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Just your standard mailbox, except that somone has built a wooden dairy cow around it. ", <$format, ["np", [], [], 'do_np]>, "This mailbox is a type of container; it can hold other objects. When you look at an open container, you also get a listing of its contents, if the container is closed it will simply tell you 'It is closed.' To open the mailbox, type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["open the mailbox"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The mailbox may already be open; if so, you may want to try closing it and opening it again. Once the mailbox is open, you will see that it contains a leaflet. To read the leaflet, type:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["look at leaflet in mailbox"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>], #[]]>;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['normal, "small mailbox", "a small mailbox"];
+var $has_name templates = ["box"];
+var $located location = $introtut_look;
+var $located obvious = 1;
+var $location contents = [$introtut_leaflet];
+var $root created_on = 874177644;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_mailbox];
+var $root manager = $introtut_mailbox;
+var $root settings = #[["closable", 1], ["closed", 0]];
+var $thing gender = $gender_neuter;
+var $thing lock = <$object_lock_frob, [$introtut_look]>;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_moving.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_moving: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Central to the concept of the Virtual Environment is your location. Generally, when you are in one place, you can only see and interact with things in that same location. Just like in real life, you cannot interact with people who are not nearby. ", <$format, ["np", [], [], 'do_np]>, "Exits are used to link locations together. You can move from place to place using exits. Most places on ", <$generator, ["servname", [], [], 'gen_servname]>, " will be connected in a consistent way, and the exits will usually be compass directions, as well as up and down. You can set how exits are listed in a room with:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@set exit-style"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Even if you choose your exit-style to be 'none', you can always type '@ways' to see a list of visible exits. ", <$format, ["np", [], [], 'do_np]>, "Try going east now, by typing 'east' or just 'e'. ", <$format, ["!--", [["This", 1], [" ", 1], ["is", 1], ["a", 1], ["small,", 1], ["poshly-decorated", 1], ["room.", 1], ["The", 1], ["walls", 1], ["are", 1], ["decorated", 1], ["with", 1], ["lavish", 1], ["tapestries,", 1], ["and", 1], ["all", 1], ["around", 1], ["you", 1], ["expensive-looking", 1], ["furniture.", 1], ["So", 1], ["expensive,", 1], ["in", 1], ["fact,", 1], ["that", 1], ["afraid", 1], ["to", 1], ["sit", 1], ["down", 1], ["on", 1], ["it,", 1], ["indeed", 1], ["owner", 1], ["seems", 1], ["have", 1], ["exact", 1], ["same", 1], ["opinion,", 1], ["for", 1], ["cushions", 1], ["covered", 1], ["plastic.", 1], ["Perhaps", 1], ["had", 1], ["better", 1], ["just", 1], ["leave", 1], ["room,", 1], ["lest", 1], ["breathe", 1], ["something.", 1], ["--", 1]], [], 'do_]>], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Moving Around", "Moving Around"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874264042;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_moving];
+var $root manager = $introtut_moving;
+var $root settings = #[["prev-topic", $introtut_look], ["next-topic", $introtut_desc], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_moving_1.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_moving_1: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Exits can have name templates, too. This place has an exit named 'stairs', with the name template 'd?own'. You can go down the stairs by typing 'stairs', 'sta', 'down', 'd', 'dow', or anything else that would match the object name or name template (see earlier in the tutorial for more information about these concepts). ", <$format, ["np", [], [], 'do_np]>, "You can get back to the tutorial by typing 'west', but try typing 'down' now."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['uniq, "Top of the Stairs", "the Top of the Stairs"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874376521;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_moving_1];
+var $root manager = $introtut_moving_1;
+var $root settings = #[["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_moving_2.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_moving_2: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["You can also chain movement commands together, if you already know where it is you want to go and how to get there. To do this, use the 'go' command, with the path you would walk. To get back to the tutorial, try typing", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["go up west"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "then type 'next' to move to the next tutorial topic."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['uniq, "Cellar", "the Cellar"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874473713;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_moving_2];
+var $root manager = $introtut_moving_2;
+var $root settings = #[["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_names.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_names: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Every object in your Virtual Environment has a name. When you see an object listed as the contents of a location, you are seeing its name. You can change the name of any object you manage with the command '", <$format, ["link", [["node", "$help_cmd_rename"]], ["@rename"], 'do_link]>, "'. ", <$format, ["np", [], [], 'do_np]>, "Names can include any number of words, such as 'a blue sock'. When you refer to an object with its name, you can use any or all of the words in the name to refer to the object. You should use as much of the name as you can, to make a correct match. You can always leave off the article--or use it, if it makes it easier. For instance, to look at the blue sock, you could type any of the following:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["> look at sock", <$format, ["br", [], [], 'do_br]>, "> look at soc", <$format, ["br", [], [], 'do_br]>, "> look at blue sock", <$format, ["br", [], [], 'do_br]>, "> look at bl", <$format, ["br", [], [], 'do_br]>, "> look at the blue sock"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "More information is available on Names and Name Templates (aliases)."], #[['links, #[["@rename", "$help_cmd_rename"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooked = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Object Names", "Object Names"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874465166;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_names];
+var $root manager = $introtut_names;
+var $root settings = #[["prev-topic", $introtut_objs], ["next-topic", $introtut_env], ["more-topic", $introtut_names_tmpl], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_names_tmpl.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_names_tmpl: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [[<$format, ["p", [], [], 'do_p]>, "Sometimes, a few hints may be added to an object's name, in order to make it easier to refer to. These hints are called Name Templates, because they use a different sort of matching than Names. ", <$format, ["np", [], [], 'do_np]>, "When you see a name template, it may have a question mark in the word ('", <$format, ["tt", [], ["?"], 'do_tt]>, "'), and multiple words may be joined together with the pipe character ('", <$format, ["tt", [], ["|"], 'do_tt]>, "'). The question mark signifies that anything beyond that point in the word is optional. For instance, if the name template 'e?ast' were given, you could type 'e', 'ea', 'eas', and 'east'. ", <$format, ["np", [], [], 'do_np]>, "The pipe character is used to specify possible alternatives, and is equivalent to saying the template can match the first word, or the second word, or the third, and so on. For instance, the template 'east|out' would match both 'east' or 'out'. ", <$format, ["np", [], [], 'do_np]>, "More information is available on how User Names work."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Name Templates", "Name Templates"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874470121;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_names_tmpl];
+var $root manager = $introtut_names_tmpl;
+var $root settings = #[["back-topic", $introtut_names], ["more-topic", $introtut_names_user], ["next-topic", $introtut_env], ["prev-topic", $introtut_objs], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_names_user.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_names_user: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["In general, object names do not have to be unique. That is, multiple objects can have the exact same name. However, users must have unique names in respect to other users. To determine the unique aspect of a name, all characters which are not alphabetic or numeric are removed from the name, and then it is compared to other names which have been stripped in the same manner. Thus, if somebody were to have the name \"Joe\", somebody else could not have the name \"Joe!\", because after it is stripped it is equivalent. ", <$format, ["np", [], [], 'do_np]>, "If you want to have more than one name refer to yourself, you can register them, using the command '", <$format, ["tt", [], ["@register"], 'do_tt]>, "'."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "User Names", "User Names"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874470130;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_names_user];
+var $root manager = $introtut_names_user;
+var $root settings = #[["back-topic", $introtut_names_tmpl], ["next-topic", $introtut_env], ["prev-topic", $introtut_objs], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_nonverbal.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_nonverbal: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Another common form of communication is the \"emote\" command, or emotion command. It is used for situations where you would not normally vocalize. For instance, if you are feeling happy, it would seem unusual to say, \"I am happy\", when there are many ways you would normally express this in real life, such as smiling or laughing. This is what the emote command is used for. ", <$format, ["np", [], [], 'do_np]>, "The emote command simply displays your name followed by whatever you typed, to everybody in the room. The command to use is either 'emote', or like say, it can also be abbreviated for convenience--this time to a colon (:). To try emote enter the following:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["emote smiles happily."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Keep in mind, an emote has no actual effect on your environment, so if you typed:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [":throws Neale out of the house."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "People would see:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " throws Neale out of the house."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "But Neale ", <$format, ["i", [], ["wouldn't"], 'do_i]>, " actually go anywhere. Nothing has happened in the Virtual Environment, except you might have made somebody angry. Emoting can be used to represent events that have not occurred, but this is generally not encouraged. A simple way of looking at it is you can emote anything about yourself, but if you intrusively involve others they may get annoyed."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Non-verbal Communication", "Non-verbal Communication"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177643;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_nonverbal];
+var $root manager = $introtut_nonverbal;
+var $root settings = #[["prev-topic", $introtut_speaking], ["next-topic", $introtut_remote], ["more-topic", $introtut_communication], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_objs.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_objs: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["Everything in your Virtual Environment on ", <$generator, ["servname", [], [], 'gen_servname]>, " is an object. This includes people, items and locations. Every object has a unique name, which is used to refer to it. This name is often called a database reference (dbref for short) or object name. An object name begins with a dollar-sign (", <$format, ["tt", [], ["$"], 'do_tt]>, ") and is followed by one or more alphabetic or numeric characters, or the undescore. All of the following are object names:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["$root", <$format, ["br", [], [], 'do_br]>, "$thing_35", <$format, ["br", [], [], 'do_br]>, <$generator, ["viewer", [], [], 'gen_viewer]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Objects also have another type of dbref called an object number. You will not likely see too many object numbers, as all valid objects should have a name--which is easier to remember. An object number begins with a pound sign (", <$format, ["tt", [], ["#"], 'do_tt]>, ") followed by a number (positive or negative). If it is a negative number, it is referring to an object which either no longer exists, or has never existed."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooked = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Objects", "Objects"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874259889;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_objs];
+var $root manager = $introtut_objs;
+var $root settings = #[["prev-topic", $introtut_help], ["next-topic", $introtut_names], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_objs_env.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_objs_env: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["When you use an object in your environment, either by picking it up, looking at it, talking to a friend or something similar (how to do each of these is explained later), ", <$generator, ["servname", [], [], 'gen_servname]>, " will remember the object in your Environment Context. This allows you to refer to previous things in a simple manner. For instance, if you were to use the command 'get' to pick up a bubbly bottle, you could drop the bubbly bottle by simply typing 'drop it', and the system would remember that 'it' refers to the 'bubbly bottle' because it was the last thing you were using. ", <$format, ["np", [], [], 'do_np]>, "In the case where multiple objects may match one name, you can use ordinal references. For instance, if there were five boxes in the same location as you, and each was named 'box', you could not simply pickup 'the box' because the server would not know which one you wanted. However, you could use an ordinal reference, such as 'the 3rd box'. ", <$format, ["np", [], [], 'do_np]>, "The server also has two known keywords which always act the same way. These are '", <$format, ["tt", [], ["me"], 'do_tt]>, "', which will always refer to you, and '", <$format, ["tt", [], ["here"], 'do_tt]>, "', which will always refer to your location. ", <$format, ["np", [], [], 'do_np]>, "More information on Objects in your Environment can be found in the help section ", <$format, ["link", [["node", "$help_environment"]], ["Environment"], 'do_link]>, "."], #[['links, #[["Environment", "$help_environment"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Objects in your Environment", "Objects in your Environment"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874293646;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_objs_env];
+var $root manager = $introtut_objs_env;
+var $root settings = #[["next-topic", $introtut_look], ["prev-topic", $introtut_names], ["back-topic", $introtut_env], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_remote.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_remote: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["When you would like to talk with someone who is logged into ", <$generator, ["servname", [], [], 'gen_servname]>, ", but isn't in your location, you can page them. The '@page' command will send your message only to the person (or people) you specify. You use this command by paging one or more people, with a message, such as:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@page me ", <$format, ["i", [], ["with"], 'do_i]>, " This is my first page."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "The ", <$format, ["i", [], ["with"], 'do_i]>, " preposition is important, and is not a part of the message you are actually paging. This exists to help the server distinguish where the list of recipients ends, and your message begins. Since this page was directed only at you, it should have looked something like:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["[from Remote Communication] ", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " says, \"This is my first page.\"", <$format, ["br", [], [], 'do_br]>, "[to ", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, "] ", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " says, \"This is my first page.\""], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "As you see, a page announces to its recipient who sent the message and where the sender is, and you also see a line showing what you sent. ", <$format, ["np", [], [], 'do_np]>, "For more information on the various features and shortcuts of paging, See ", <$format, ["link", [["node", "$help_cmd_page"]], ["@page"], 'do_link]>, "."], #[['links, #[["@page", "$help_cmd_page"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Remote Communication", "Remote Communication"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177643;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_remote];
+var $root manager = $introtut_remote;
+var $root settings = #[["next-topic", $introtut_who], ["prev-topic", $introtut_nonverbal], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_speaking.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_speaking: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["One of the most used features of a Virtual Environment Server is communicating with other users online. There are several ways you can communicate with others, starting with the 'say' command. To experiment with speaking, enter the following:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["say Hello, I am new here."], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "Not only will you (virtually) vocalize, but since you are currently in the tutorial you will also see what others will see. It should look like:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], [<$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " says, \"Hello, I am new here.\"", <$format, ["br", [], [], 'do_br]>, "[ Everyone else would see: ", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>, " says, \"Hello, I am new here.\" ]"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "For convenience, you can also abbreviate the say command to a single double-quote character (\"). This will provide the exact same result as the slightly longer command did before. You do not need to append another double-quote to your command since it is automatically provided. Try both forms, to see how they work."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Speaking", "Speaking"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177642;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_speaking];
+var $root manager = $introtut_speaking;
+var $root settings = #[["prev-topic", $introtut_gender], ["next-topic", $introtut_nonverbal], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_start.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,26 @@
+
+new object $introtut_start: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["This is the beginner tutorial to ColdCore and ", <$generator, ["servname", [], [], 'gen_servname]>, ".", <$format, ["br", [], [], 'do_br]>, " It is designed to help introduce you to some of the common commands", <$format, ["br", [], [], 'do_br]>, " you will be using most often. Throughout this tutorial you may be asked", <$format, ["br", [], [], 'do_br]>, " to try a command. We encourage you to do so, and to experiment as much", <$format, ["br", [], [], 'do_br]>, " as you desire. If the command causes the topic's instructions to scroll", <$format, ["br", [], [], 'do_br]>, " off the screen, simply type '", <$format, ["tt", [], ["look"], 'do_tt]>, "' to see them again. ", <$format, ["np", [], [], 'do_np]>, "Each topic in the tutorial is given in a seperate step. You can move", <$format, ["br", [], [], 'do_br]>, " back and forth between steps with the commands '", <$format, ["tt", [], ["next"], 'do_tt]>, "' and '", <$format, ["tt", [], ["prev"], 'do_tt]>, "'.", <$format, ["br", [], [], 'do_br]>, " You can exit the tutorial at any time by typing the command '", <$format, ["tt", [], ["exit"], 'do_tt]>, "'."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooked = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Welcome!", "Welcome!"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874181387;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_start];
+var $root manager = $introtut_start;
+var $root settings = #[["next-topic", $introtut_lines], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_user_graffiti.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,44 @@
+
+new object $introtut_user_graffiti: $thing;
+
+var $described prose = <$ctext_frob, [[], #[]]>;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "graffiti", "graffiti"];
+var $introtut_user_graffiti users = [];
+var $located location = $introtut_desc;
+var $located obvious = 1;
+var $root created_on = 874175358;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_user_graffiti];
+var $root manager = $introtut_user_graffiti;
+var $thing gender = $gender_neuter;
+var $thing lock = <$object_lock_frob, [$introtut_desc]>;
+
+public method .core_introtut_user_graffiti() {
+    var o;
+    
+    users = filter o in (users) where (valid(o));
+};
+
+public method .description() {
+    arg flags;
+    var p, i, lines;
+    
+    p = $ctext_frob.new_with([$cml_lib.format_hr_tag()]);
+    lines = [];
+    for i in (users)
+        lines += [p, i.prose()];
+    return (> pass(flags) <) + lines;
+};
+
+public method .prose() {
+    arg @ignored;
+    
+    return "";
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/introtut_who.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,25 @@
+
+new object $introtut_who: $introductory_tutorial;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $command_cache shortcuts = 0;
+var $described prose = <$ctext_frob, [["It is possible to get a list of everybody who is using ", <$generator, ["servname", [], [], 'gen_servname]>, " at the same time you are. This information is useful for many things, from finding if friends are currently connected to finding somebody's location. ", <$format, ["np", [], [], 'do_np]>, "The command to list everybody connected is ", <$format, ["help", [["node", "$help_cmd_who"]], ["@who"], 'do_help]>, ". Type ", <$format, ["help", [["node", "$help_cmd_who"]], ["@who"], 'do_help]>, " now, to see who is online, how long they have been online, how long it has been since they have typed anything, and where they currently are located. Go ahead and try it now, see who is online. ", <$format, ["np", [], [], 'do_np]>, "You can also specify a specific person with @who. Doing this will only show you information on that specific person. Try this by using yourself as the person, such as:", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["@who ", <$generator, ["name", [], [<$generator, ["viewer", [], [], 'gen_viewer]>], 'gen_name]>], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "If you want to learn more information about a person, you may want to use the ", <$format, ["link", [["node", "$help_cmd_finger"]], ["@finger"], 'do_link]>, " command. For more information on either of these commands, read the help documents for them."], #[['links, #[["@finger", "$help_cmd_finger"]]]]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Who's on-line?", "Who's on-line?"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177643;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$introtut_who];
+var $root manager = $introtut_who;
+var $root settings = #[["prev-topic", $introtut_remote], ["next-topic", $introtut_end], ["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/mime_lib.cdc	Sat Mar 14 15:49:25 1998
@@ -0,0 +1,43 @@
+
+new object $mime_lib: $libraries;
+
+var $dmi_data descriptions = #[];
+var $mime_lib mime_types = #[["csm", "application/cu-seeme"], ["cu", "application/cu-seeme"], ["tsp", "application/dsptype"], ["xls", "application/excel"], ["doc", "application/msword"], ["dot", "application/msword"], ["wrd", "application/msword"], ["bin", "application/octet-stream"], ["oda", "application/oda"], ["pdf", "application/pdf"], ["pgp", "application/pgp-signature"], ["ps", "application/postscript"], ["ai", "application/postscript"], ["eps", "application/postscript"], ["ppt", "application/powerpoint"], ["rtf", "application/rtf"], ["wp5", "application/wordperfect5.1"], ["wk", "application/x-123"], ["wz", "application/x-Wingz"], ["bcpio", "application/x-bcpio"], ["z", "application/x-compress"], ["cpio", "application/x-cpio"], ["csh", "application/x-csh"], ["cdc", "application/x-coldc"], ["deb", "application/x-debian-package"], ["com", "application/x-msdos-program"], ["exe", "application/x-msdos-program"], ["bat", "application/x-msdos-program"], ["dvi", "application/x-dvi"], ["gtar", "application/x-gtar"], ["tgz", "application/x-gtar"], ["gz", "application/x-gzip"], ["hdf", "application/x-hdf"], ["phtml", "application/x-httpd-php"], ["pht", "application/x-httpd-php"], ["php", "application/x-httpd-php"], ["latex", "application/x-latex"], ["frm", "application/x-maker"], ["maker", "application/x-maker"], ["frame", "application/x-maker"], ["fm", "application/x-maker"], ["fb", "application/x-maker"], ["book", "application/x-maker"], ["fbdoc", "application/x-maker"], ["mif", "application/x-mif"], ["nc", "application/x-netcdf"], ["cdf", "application/x-netcdf"], ["pl", "application/x-perl"], ["pm", "application/x-perl"], ["sh", "application/x-sh"], ["shar", "application/x-shar"], ["sv4cpio", "application/x-sv4cpio"], ["sv4crc", "application/x-sv4crc"], ["tar", "application/x-tar"], ["tcl", "application/x-tcl"], ["tex", "application/x-tex"], ["texinfo", "application/x-texinfo"], ["texi", "application/x-texinfo"], ["t", "application/x-troff"], ["tr", "application/x-troff"], ["roff", "application/x-troff"], ["man", "application/x-troff-man"], ["me", "application/x-troff-me"], ["ms", "application/x-troff-ms"], ["ustar", "application/x-ustar"], ["src", "application/x-wais-source"], ["zip", "application/zip"], ["au", "audio/basic"], ["snd", "audio/basic"], ["mid", "audio/midi"], ["midi", "audio/midi"], ["aif", "audio/x-aiff"], ["aiff", "audio/x-aiff"], ["aifc", "audio/x-aiff"], ["ra", "audio/x-pn-realaudio"], ["ram", "audio/x-pn-realaudio"], ["wav", "audio/x-wav"], ["gif", "image/gif"], ["ief", "image/ief"], ["jpeg", "image/jpeg"], ["jpg", "image/jpeg"], ["jpe", "image/jpeg"], ["png", "image/png"], ["tiff", "image/tiff"], ["tif", "image/tiff"], ["ras", "image/x-cmu-raster"], ["pnm", "image/x-portable-anymap"], ["pbm", "image/x-portable-bitmap"], ["pgm", "image/x-portable-graymap"], ["ppm", "image/x-portable-pixmap"], ["rgb", "image/x-rgb"], ["xbm", "image/x-xbitmap"], ["xpm", "image/x-xpixmap"], ["xwd", "image/x-xwindowdump"], ["html", "text/html"], ["htm", "text/html"], ["txt", "text/plain"], ["c", "text/plain"], ["h", "text/plain"], ["cc", "text/plain"], ["hh", "text/plain"], ["cpp", "text/plain"], ["hpp", "text/plain"], ["rtx", "text/richtext"], ["tsv", "text/tab-separated-values"], ["etx", "text/x-setext"], ["vcs", "text/x-vCalendar"], ["vcf", "text/x-vCard"], ["dl", "video/dl"], ["fli", "video/fli"], ["gl", "video/gl"], ["mpeg", "video/mpeg"], ["mpg", "video/mpeg"], ["mpe", "video/mpeg"], ["qt", "video/quicktime"], ["mov", "video/quicktime"], ["avi", "video/x-msvideo"], ["movie", "video/x-sgi-movie"], ["vrm", "x-world/x-vrml"], ["vrml", "x-world/x-vrml"], ["wrl", "x-world/x-vrml"], ["py", "application/x-python"], ["pyc", "application/x-python"]];
+var $root created_on = 885275032;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$mime_lib];
+var $root manager = $mime_lib;
+var $root trusted_by = [$file];
+
+public method .mime_type() {
+    arg filename;
+    var ext;
+    
+    ext = substr(filename, stridx(filename, ".", -1) + 1);
+    catch ~keynf
+        return mime_types[ext];
+    with
+        return "text/plain";
+};
+
+public method .rehash() {
+    var line, i, f;
+    
+    (> .perms(sender(), 'system) <);
+    f = $file.fopen("/mime.types");
+    mime_types = #[];
+    catch ~eof {
+        while (1) {
+            line = f.fread();
+            if (line && ((line[1]) != "#")) {
+                line = line.explode();
+                for i in (line.subrange(2))
+                    mime_types = mime_types.add(i, line[1]);
+            }
+        }
+    }
+    f.fclose();
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/path.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,636 @@
+
+new object $path: $physical;
+
+var $described prose = [];
+var $dmi_data descriptions = #[];
+var $foundation defined_msgs = #[["invoke", #[['branches, ["actor.*", "source.*", "dest.*"]], ['parser, 'parse_exit_msg], ['varkeys, #[["actor", "$source"], ["source", "$source"], ["dest", "$dest"]]]]], ["exit-open", #[['branches, ["actor", "general"]]]], ["exit-close", #[['branches, ["actor", "general"]]]], ["lock-fail", #[['branches, ["general", "actor"]]]], ["lock-try", #[['branches, ["general", "actor"]]]], ["lock-unlock", #[['branches, ["general", "actor"]]]], ["lock-lock", #[['branches, ["general", "actor"]]]], ["exit-closed", #[['branches, ["actor", "general"]]]]];
+var $foundation msgs = #[["invoke", #[["actor", <$ctext_frob, [["You take ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>], ["source", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " goes through ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>], ["dest", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " arrives."], #[['this, $path]]]>]]], ["exit-close", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " closes ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>], ["actor", <$ctext_frob, [["You close ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>]]], ["exit-open", #[["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " opens ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>], ["actor", <$ctext_frob, [["You open ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>]]], ["lock-fail", #[["actor", <$ctext_frob, [[<$generator, ["this", [], [], 'gen_this]>, " is locked."], #[['this, $path]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " tries to take ", <$generator, ["this", [], [], 'gen_this]>, " but its locked!"], #[['this, $path]]]>]]], ["lock-try", #[["actor", <$ctext_frob, [["You use ", <$generator, ["lock", [], [], 'gen_lock]>, " on ", <$generator, ["this", [], [], 'gen_this]>, "."], #[['this, $path]]]>], ["general", <$ctext_frob, [[], #[['this, $path]]]>]]], ["lock-unlock", #[["actor", <$ctext_frob, [["You unlock ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $path]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " unlocks ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $path]]]>]]], ["lock-lock", #[["actor", <$ctext_frob, [["You lock ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $path]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " locks ", <$generator, ["this", [], [], 'gen_this]>, <$generator, ["withlock", [], [], 'gen_withlock]>, "."], #[['this, $path]]]>]]], ["exit-closed", #[["actor", <$ctext_frob, [["You try to go through ", <$generator, ["this", [], [], 'gen_this]>, " but it is closed!"], #[['this, $path]]]>], ["general", <$ctext_frob, [[<$generator, ["actor", [], [], 'gen_actor]>, " tries to take ", <$generator, ["this", [], [], 'gen_this]>, " but it is closed!"], #[['this, $path]]]>]]]];
+var $has_commands local = #[];
+var $has_commands remote = #[["@lock", [["@lock", "*", "@lock <this>", 'lock_cmd, #[[1, ['this, []]]]], ["@lock", "* with|to *", "@lock <this> with|to <any>", 'lock_with_cmd, #[[1, ['this, []]], [3, ['any, []]]]]]], ["@unlock", [["@unlock", "*", "@unlock <this>", 'unlock_cmd, #[[1, ['this, []]]]]]], ["open", [["open", "*", "open <this>", 'open_cmd, #[[1, ['this, []]]]]]], ["close", [["close", "*", "close <this>", 'close_cmd, #[[1, ['this, []]]]]]]];
+var $has_commands shortcuts = #[];
+var $has_name name = ['uniq, "Generic Path", "the Generic Path"];
+var $path closable = 0;
+var $path close_style = 0;
+var $path closed = 0;
+var $path lock = 0;
+var $path msg_vars = #[["$actor", 0], ["actor", 0], ["$source", 0], ["source", 0], ["$dest", 0], ["dest", 0], ["$this", 0], ["this", 0], ["$lock", 0]];
+var $path names = #[];
+var $path transparent = 0;
+var $path ways = #[];
+var $root created_on = 881987340;
+var $root defined_settings = #[["closable", #[['get, ['get_closable]], ['set, ['set_closable]], ['parse, ['is_boolean]], ['clear, ['clear_closable]], ['format, ['format_boolean]]]], ["transparent", #[['get, ['get_transparent]], ['set, ['set_transparent]], ['parse, ['parse_transparent]], ['clear, ['clear_transparent]], ['format, ['format_transparent]]]], ["close-style", #[['get, ['get_close_style]], ['set, ['set_close_style]], ['parse, ['parse_close_style]], ['clear, ['clear_close_style]], ['format, ['format_close_style]]]]];
+var $root flags = ['variables, 'methods, 'code, 'core, 'fertile];
+var $root inited = 1;
+var $root managed = [$path];
+var $root manager = $path;
+
+public method .add_name_template() {
+    arg template, @args;
+    var p, name, loc;
+    
+    (> .perms(sender()) <);
+    if (args) {
+        loc = args[1];
+    } else {
+        if (!user())
+            throw(~error, "Unable to determine source for name -- no task user");
+        loc = user().location();
+    }
+    name = (| names[loc] |) || ['normal, "path", "a ", []];
+    template = template.trim();
+    for p in (explode(template, "|")) {
+        if (match_begin(name[2], p.strip()))
+            throw(~redundant, ("Redundant name template part \"" + p) + "\" already matches name.");
+    }
+    name = replace(name, 4, setadd(name[4], template));
+    names = dict_add(names, loc, name);
+};
+
+public method .attach() {
+    arg src, dst, @ignore;
+    
+    (> .perms(sender()) <);
+    (src.is($place)) || throw(~place, (src.namef('ref)) + " is not a place.");
+    (dst.is($place)) || throw(~place, (dst.namef('ref)) + " is not a place.");
+    (> src.will_attach('source, sender()) <);
+    (> dst.will_attach('dest, sender()) <);
+    if (!ways)
+        ways = #[];
+    ways = ways.add(src, dst);
+    (> src.attach_exit('source, this()) <);
+    (> dst.attach_exit('dest, this()) <);
+};
+
+protected method .clear_closable() {
+    arg name;
+    
+    (| clear_var('closable) |);
+};
+
+protected method .clear_close_style() {
+    arg name;
+    
+    (| clear_var('close_style) |);
+};
+
+protected method .clear_transparent() {
+    arg name;
+    
+    (| clear_var('transparent) |);
+};
+
+public method .close_cmd() {
+    arg cmdstr, cmd, this;
+    var vars, m, source, dest;
+    
+    catch ~locked
+        .try_lock(sender());
+    with
+        return (traceback()[1])[2];
+    source = sender().location();
+    dest = .get_way(source);
+    if (closable) {
+        if (closed)
+            return ((.name()).capitalize()) + " is already closed.";
+        else
+            .close_path(sender(), source, dest);
+    } else {
+        return ((.name()).capitalize()) + " cannot be closed.";
+    }
+};
+
+protected method .close_path() {
+    arg actor, source, dest;
+    var vars, m;
+    
+    if (!closable)
+        throw(~perm, "That is not closable, what are you thinking?");
+    closed = 1;
+    vars = .path_msg_vars(actor, @.get_ways(actor));
+    m = .eval_message("exit-close", $path, vars);
+    source.announce(m);
+    dest.announce(m);
+};
+
+public method .del_name_template() {
+    arg template;
+    var loc, name;
+    
+    (> .perms(sender()) <);
+    if (!user())
+        throw(~error, "Unable to determine source for name -- no task user");
+    loc = user().location();
+    name = (| names[loc] |) || ['normal, "path", "a ", []];
+    names = dict_add(names, loc, replace(name, 4, setremove(name[4], template)));
+};
+
+protected method .description() {
+    arg flags;
+    var out, src;
+    
+    out = (> pass(flags) <);
+    
+    // transparent: -1=when-open, 0=yes, 1=no
+    src = (flags['actor]).location();
+    switch (transparent) {
+        case 1:
+            return out;
+        case 0:
+            if (closed)
+                out += [(.name()) + " is closed."];
+            return out + [(<$ctext_frob, [[(<$format, ["subj", [], [("Through " + (.name())) + " you see.."], 'do_subj]>)], #[]]>), (.dest(src)).get_description(flags)];
+        case -1:
+            if (closed)
+                return out + [(.name()) + " is closed."];
+            return out + [(<$ctext_frob, [[(<$format, ["subj", [], [("Through " + (.name())) + " you see.."], 'do_subj]>)], #[]]>), (.dest(src)).get_description(flags)];
+    }
+};
+
+public method .dest() {
+    arg @src;
+    
+    if (!ways)
+        return $nowhere;
+    if (!src)
+        src = sender();
+    else
+        src = src[1];
+    return (| ways[src] |) || throw(~noway, "No path exists from " + src);
+};
+
+protected method .detach() {
+    arg source;
+    var dest;
+    
+    if (ways && dict_contains(ways, source)) {
+        source.detach_exit('source, this());
+        dest = ways[source];
+        dest.detach_exit('dest, this());
+        if (dict_contains(names, source))
+            names = dict_del(names, source);
+        if (dict_contains(names, dest))
+            names = dict_del(names, dest);
+        ways = dict_del(ways, source);
+    }
+};
+
+public method .exit_msg_vars() {
+    arg actor, source, dest, @more;
+    var vars;
+    
+    vars = dict_add(default_var('msg_vars), "$actor", actor);
+    vars = dict_add(vars, "actor", actor.name());
+    vars = dict_add(vars, "$source", source);
+    vars = dict_add(vars, "source", source.name());
+    vars = dict_add(vars, "$dest", dest);
+    vars = dict_add(vars, "dest", dest.name());
+    vars = dict_add(vars, "$this", this());
+    vars = dict_add(vars, "this", .name());
+    vars = dict_add(vars, "$lock", lock);
+    if (more)
+        vars = dict_union(vars, more[1]);
+    return vars;
+};
+
+protected method .format_close_style() {
+    arg value;
+    
+    if (value)
+        return "manual";
+    return "auto";
+};
+
+protected method .format_transparent() {
+    arg value;
+    
+    switch (value) {
+        case 1:
+            return "no";
+        case 0:
+            return "yes";
+        case -1:
+            return "when-open";
+        default:
+            return "<<ERROR>>";
+    }
+};
+
+public method .get_closable() {
+    arg name, definer;
+    
+    return closable;
+};
+
+public method .get_close_style() {
+    arg name, definer;
+    
+    return close_style;
+};
+
+public method .get_transparent() {
+    arg name, definer;
+    
+    return transparent;
+};
+
+public method .get_way() {
+    arg source;
+    var dest;
+    
+    if (!(dest = (| ways[source] |)))
+        throw(~invsrc, "You are not located in any source for this exit");
+    if (!valid(dest))
+        return actor.tell((.name()) + " has an invalid destination!");
+    return dest;
+};
+
+protected method .get_ways() {
+    arg actor;
+    var s;
+    
+    s = actor.location();
+    if (!dict_contains(ways, s))
+        throw(~notexit, "That exit is not where you are.");
+    return [s, ways[s]];
+};
+
+public method .hname() {
+    arg @args;
+    
+    // WARNING: THIS IS WRONG AND WILL NOT WORK
+    return ((("<a href=\"/bin/describe?target=" + (.objname())) + "\">") + (.name())) + "</a>";
+};
+
+root method .init_path() {
+    names = #[];
+};
+
+public method .invoke() {
+    arg @flags;
+    var here, vars, m, actor, ln, v, dest, source, doclose;
+    
+    actor = sender();
+    source = actor.location();
+    dest = (> .get_way(source) <);
+    if (closed) {
+        if (close_style || (!(actor.is($user)))) {
+            m = .eval_message("exit-closed", $path, .path_msg_vars(actor, source, dest));
+            return source.announce(m);
+        } else {
+            .open_path(actor, source, dest);
+            doclose = 1;
+        }
+    }
+    if (flags)
+        flags = flags[1];
+    else
+        flags = #[];
+    flags = dict_add(flags, 'actor, actor);
+    flags = flags.add_elem('exclude, actor);
+    if (lock && (!(lock.try(actor)))) {
+        v = #[["lock", lock.lock_name()]];
+        m = .eval_message("lock-fail", $path, .path_msg_vars(actor, source, dest, v));
+        return source.announce(m);
+    }
+    m = .eval_message("invoke", $path, .path_msg_vars(actor, source, dest));
+    actor.tell(m);
+    actor.move_to(dest);
+    dest.announce(m, actor);
+    source.announce(m);
+    if (doclose)
+        .close_path(actor, dest, source);
+};
+
+public method .is_visible_to() {
+    arg whom;
+    
+    return (.visibility()) >= ((whom.location()).darkness());
+};
+
+public method .lock() {
+    return lock || ($true_lock_frob.new());
+};
+
+public method .lock_cmd() {
+    arg cmdstr, cmd, this;
+    
+    if (!(| .perms(sender()) |))
+        return ((("Only " + ((.manager()).name())) + " can lock ") + (.name())) + "!";
+    lock = $false_lock_frob.new();
+    return "You lock " + (.name());
+};
+
+public method .lock_with_cmd() {
+    arg cmdstr, cmd, this, prep, str;
+    
+    if (!(| .perms(sender()) |))
+        return ((("Only " + ((.manager()).name())) + " can lock ") + (.name())) + "!";
+    catch ~objnf, ~parse {
+        lock = $lock_frob.parse(str, sender());
+        return ((("You lock " + (.name())) + " to allow ") + (lock.lock_name('exit))) + ".";
+    } with {
+        switch (error()) {
+            case ~objnf:
+                return "Object not found in lock string.";
+            case ~parse:
+                return "Invalid lock string.";
+        }
+    }
+};
+
+public method .match_name() {
+    arg str;
+    var m, t, name;
+    
+    name = .name('literal);
+    if ((m = match_begin(name[2], str)))
+        return m;
+    for t in (name[4]) {
+        if ((m = match_template(str, t)))
+            return m;
+    }
+    return 0;
+};
+
+public method .match_name_exact() {
+    arg str;
+    
+    return str == (.name('noarticle));
+};
+
+public method .name() {
+    arg @args;
+    var name, loc;
+    
+    if (user())
+        loc = user().location();
+    else
+        loc = (| sender().location() |) || sender();
+    if (!(name = (| names[loc] |)))
+        name = (| dict_values(names)[1] |) || ['normal, "path", "a ", []];
+    if (!args)
+        return (name[3]) + (name[2]);
+    switch (args[1]) {
+        case 'type:
+            return name[1];
+        case 'noarticle:
+            return (name[3]) + (name[2]);
+        default:
+            return name;
+    }
+};
+
+public method .name_templates() {
+    return (.name('literal))[4];
+};
+
+public method .open_cmd() {
+    arg cmdstr, cmd, this;
+    var vars, m, source, dest;
+    
+    catch ~locked
+        .try_lock(sender());
+    with
+        return (traceback()[1])[2];
+    source = sender().location();
+    dest = .get_way(source);
+    if (closable) {
+        if (closed)
+            .open_path(sender(), source, dest);
+        else
+            return ((.name()).capitalize()) + " is already open.";
+    } else {
+        return ((.name()).capitalize()) + " cannot be opened.";
+    }
+};
+
+protected method .open_path() {
+    arg actor, source, dest;
+    var vars, m;
+    
+    if (!closable)
+        throw(~perm, "That is not closable, what are you thinking?");
+    (| clear_var('closed) |);
+    vars = .path_msg_vars(actor, @.get_ways(actor));
+    m = .eval_message("exit-open", $path, vars);
+    source.announce(m);
+    dest.announce(m);
+};
+
+protected method .parse_close_style() {
+    arg value, @args;
+    var bool;
+    
+    // 0=auto 1=manual
+    if (match_begin(value, "manual"))
+        return 1;
+    else if (match_begin(value, "auto"))
+        return 0;
+    else
+        throw(~invtype, "Invalid close-style setting, try: auto, manual");
+};
+
+public method .parse_exit_msg() {
+    arg def, name, @branch;
+    var target, obj;
+    
+    if (listlen(branch) == 1)
+        return [def, name, branch[1]];
+    target = branch[2];
+    if (target == "here")
+        obj = user().location();
+    else if ((target == "source") || (target == "src"))
+        obj = (| user().location() |);
+    else if (match_begin(target, "destination") || (target == "there"))
+        obj = (| ways[user().location()] |);
+    else if (!(obj = (| $object_lib.to_dbref(target) |)))
+        obj = (> user().match_environment(target) <);
+    if ((!ways) || ((!dict_contains(ways, obj)) || (!(obj in (ways.values())))))
+        throw(~invobj, ((("The branch '" + target) + "' matches ") + (obj.name())) + " which is not a valid way for the path.");
+    return [def, name, ((branch[1]) + ".") + (obj.objname())];
+};
+
+protected method .parse_transparent() {
+    arg value, @args;
+    var bool;
+    
+    // -1=when-open, 0=yes, 1=no
+    if ((bool = value.is_boolean()) != (-1)) {
+        return !bool;
+    } else if (value == "when-open") {
+        if (!closable)
+            throw(~inv, "Transparent setting of 'when-open' only works with closable paths.");
+        return -1;
+    } else {
+        throw(~invtype, "Invalid transparency setting, try: yes, no, when-open");
+    }
+};
+
+public method .path_msg_vars() {
+    arg actor, source, dest, @more;
+    var vars;
+    
+    vars = dict_add(default_var('msg_vars), "$actor", actor);
+    vars = dict_add(vars, "actor", actor.name());
+    vars = dict_add(vars, "$source", source);
+    vars = dict_add(vars, "source", source.name());
+    vars = dict_add(vars, "$dest", dest);
+    vars = dict_add(vars, "dest", dest.name());
+    vars = dict_add(vars, "$this", this());
+    vars = dict_add(vars, "this", .path_name(source));
+    vars = dict_add(vars, "$lock", lock);
+    if (more)
+        vars = dict_union(vars, more[1]);
+    return vars;
+};
+
+public method .path_name() {
+    arg loc, @args;
+    var name, loc;
+    
+    if (!(name = (| names[loc] |)))
+        name = (| dict_values(names)[1] |) || ['normal, "path", "a ", []];
+    if (!args)
+        return (name[3]) + (name[2]);
+    switch (args[1]) {
+        case 'type:
+            return name[1];
+        case 'noarticle:
+            return (name[3]) + (name[2]);
+        default:
+            return name;
+    }
+};
+
+public method .place_destroyed() {
+    arg place;
+    var s;
+    
+    (> .perms(caller(), $place) <);
+    if (dict_contains(ways, place))
+        .detach(place);
+    for s in (ways || #[]) {
+        if ((s[2]) == place)
+            .detach(s[1]);
+    }
+    if (!ways)
+        $sys.destroy_sender();
+};
+
+protected method .set_closable() {
+    arg name, definer, value;
+    
+    if (value) {
+        closable = 1;
+    } else if (closable) {
+        if (closed)
+            (| clear_var('closed) |);
+        (| clear_var('closable) |);
+    }
+};
+
+protected method .set_close_style() {
+    arg name, definer, value;
+    
+    if (!value)
+        (| clear_var('close_style) |);
+    else
+        close_style = value;
+};
+
+public method .set_name() {
+    arg name, @args;
+    var type, loc, set;
+    
+    (> .perms(sender()) <);
+    [(type ?= 'normal), (loc ?= 0)] = args;
+    if (!loc) {
+        if (!user())
+            throw(~error, "Unable to determine source for name -- no task user");
+        loc = user().location();
+    }
+    if ((!dict_contains(ways, loc)) && (!(loc in dict_values(ways))))
+        throw(~invloc, ((loc.namef('ref)) + " is not a valid way for ") + this());
+    (> $code_lib.valid_name(name, type) <);
+    set = (| names[loc] |) || [0, 0, 0, []];
+    set = replace(set, 1, type);
+    set = replace(set, 2, name);
+    switch (type) {
+        case 'prop:
+            set = replace(set, 3, "");
+        case 'uniq:
+            set = replace(set, 3, "the ");
+        case 'normal:
+            set = replace(set, 3, (name.a_or_an()) + " ");
+    }
+    names = dict_add(names, loc, set);
+};
+
+protected method .set_transparent() {
+    arg name, definer, value;
+    
+    if (!value)
+        (| clear_var('transparent) |);
+    else
+        transparent = value;
+};
+
+public method .source() {
+    arg @dst;
+    var i;
+    
+    if (!ways)
+        return $nowhere;
+    if (!dst)
+        dst = sender();
+    else
+        dst = dst[1];
+    if ((i = dst in dict_values(ways)))
+        return dict_keys(ways)[i];
+    throw(~noway, "No path exists from " + dst);
+};
+
+public method .try_lock() {
+    arg @args;
+    
+    (.lock()).try(@args);
+};
+
+root method .uninit_nexit() {
+    var s;
+    
+    for s in (ways)
+        (| .detach(s) |);
+    (| clear_var('ways) |);
+    (| clear_var('lock) |);
+    (| clear_var('closable) |);
+    (| clear_var('closed) |);
+    (| clear_var('msg_vars) |);
+};
+
+root method .uninit_path() {
+    var s;
+    
+    for s in (ways || #[])
+        (| .detach(s[1]) |);
+    (| clear_var('ways) |);
+    (| clear_var('lock) |);
+    (| clear_var('closable) |);
+    (| clear_var('closed) |);
+    (| clear_var('msg_vars) |);
+};
+
+public method .unlock_cmd() {
+    arg cmdstr, cmd, this;
+    
+    if (!(| .perms(sender()) |))
+        return ((("Only " + ((.manager()).name())) + " can lock ") + (.name())) + "!";
+    lock = $true_lock_frob.new();
+    sender().tell("You unlock " + (.name()));
+};
+
+public method .ways() {
+    return ways || #[];
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/pop3_connection.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,19 @@
+
+new object $pop3_connection: $inbound_connection;
+
+var $connection buffer = `[];
+var $connection interface = $pop3_interface;
+var $connection line_buffer = [];
+var $connection local_addr = "";
+var $connection remote_addr = "";
+var $connection tid = -1;
+var $connection timeout = 300;
+var $dmi_data descriptions = #[];
+var $root created_on = 872047000;
+var $root flags = ['core, 'methods, 'variables, 'code];
+var $root inited = 1;
+var $root managed = [$pop3_connection];
+var $root manager = $pop3_connection;
+var $root quota_exempt = 1;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/pop3_daemon.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,13 @@
+
+new object $pop3_daemon: $daemon;
+
+var $daemon connection = $pop3_connection;
+var $daemon listen = [[1210]];
+var $dmi_data descriptions = #[];
+var $root created_on = 872047000;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$pop3_daemon];
+var $root manager = $pop3_daemon;
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/pop3_interface.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,301 @@
+
+new object $pop3_interface: $connection_interface;
+
+var $command_cache commands = 0;
+var $command_cache shortcuts = 0;
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $pop3_interface commands = #[["QUIT", 'quit_cmd], ["STAT", 'stat_cmd], ["LIST", 'list_cmd], ["RETR", 'retr_cmd], ["DELE", 'dele_cmd], ["NOOP", 'noop_cmd], ["RSET", 'rset_cmd], ["TOP", 'top_cmd], ["UIDL", 'uidl_cmd], ["USER", 'user_cmd], ["PASS", 'pass_cmd], ["APOP", 'apop_cmd]];
+var $pop3_interface deleted = [];
+var $pop3_interface mail_objects = [];
+var $pop3_interface maildrop = 0;
+var $pop3_interface messages = [];
+var $pop3_interface state = 0;
+var $root created_on = 871668198;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$pop3_interface];
+var $root manager = $pop3_interface;
+var $root quota_exempt = 1;
+
+protected method .check_state() {
+    arg command, st;
+    
+    if (state != st)
+        throw(~stop, ((("-ERR " + command) + " command only valid in ") + st) + " state");
+};
+
+protected method .check_valid_message() {
+    arg num;
+    
+    if ((num < 1) || (num > (messages.length())))
+        throw(~stop, ("-ERR no such message, only " + (messages.length())) + " messages in maildrop");
+    else if (num in deleted)
+        throw(~stop, "-ERR ", x, " refers to a deleted message");
+};
+
+public method .connection_starting() {
+    arg host, port;
+    
+    (> .perms(caller(), $connection) <);
+    state = 'authorization;
+    deleted = [];
+    .print("+OK Cold POP3 Server ready");
+};
+
+protected method .dele_cmd() {
+    arg argstr;
+    var msgnum;
+    
+    (> .check_state("DELE", 'transaction) <);
+    (> .check_valid_message((msgnum = toint(argstr))) <);
+    deleted += [msgnum];
+    .print("+OK message deleted");
+};
+
+protected method .format_rfc822() {
+    arg message;
+    var out, x, line;
+    
+    if (message.meta()) {
+        out = [];
+        for x in (message.meta())
+            out += [((x[1]) + ": ") + (x[2])];
+    } else {
+        out = ["Date: " + ($time.format("%a, %e %b %Y %T %Z", message.time()))];
+        out += ["From: " + ($smtp.get_email_address(message.from()))];
+        out += ["To: " + (((message.recipients()).omap($smtp, 'get_email_address)).join(", "))];
+        out += [((("Message-ID: <" + (.unique_id(out))) + "@") + ($sys.server_info('server_hostname))) + ">"];
+        out += ["Subject: " + (message.subject())];
+    }
+    out += [""];
+    for line in (message.body()) {
+        if ((line.length()) > 79)
+            out += line.wrap_lines(75);
+        else
+            out += [line];
+    }
+    return out;
+};
+
+protected method .invalid_cmd() {
+    arg line;
+    
+    .print("-ERR unimplemented or unrecognized command");
+};
+
+protected method .list_cmd() {
+    arg argstr;
+    var x, m;
+    
+    (> .check_state("LIST", 'transaction) <);
+    if (argstr) {
+        (> .check_valid_message((x = toint(argstr))) <);
+        .print("+OK " + (.message_size(messages[x])));
+    } else {
+        .print(((("+OK " + ((m = .live_messages()).length())) + " messages (") + ((m.omap(this(), 'message_size)).sum())) + " octets)");
+        for x in [1 .. messages.length()] {
+            if (!(x in deleted))
+                .print((x + " ") + (.message_size(messages[x])));
+        }
+        .print(".");
+    }
+};
+
+protected method .live_messages() {
+    var x, r;
+    
+    r = [];
+    for x in [1 .. messages.length()] {
+        if (!(x in deleted))
+            r += [messages[x]];
+    }
+    return r;
+};
+
+public method .message_size() {
+    arg message;
+    
+    return (message.to_buffer()).length();
+};
+
+protected method .noop_cmd() {
+    arg argstr;
+    
+    (> .check_state("NOOP", 'transaction) <);
+    .print("+OK");
+};
+
+protected method .null_cmd() {
+    arg line;
+    
+    return .invalid_cmd(line);
+};
+
+public method .parse_line() {
+    arg line;
+    var cmd, argstr, meth;
+    
+    (> .perms(caller(), $connection) <);
+    cmd = line.word(1);
+    argstr = (" " in line) ? (line.subrange((" " in line) + 1)) : "";
+    if (!cmd)
+        meth = 'null_cmd;
+    else
+        meth = (| default_var('commands)[cmd] |) || 'invalid_cmd;
+    catch any {
+        return .(meth)(argstr);
+    } with {
+        if (error() == ~stop) {
+            .print((traceback()[1])[2]);
+        } else {
+            .print("-ERR Unrecoverable internal error");
+            return 'disconnect;
+        }
+    }
+};
+
+protected method .pass_cmd() {
+    arg argstr;
+    var x;
+    
+    (> .check_state("USER", 'authorization) <);
+    if (!maildrop)
+        throw(~stop, "-ERR issue USER command first");
+    if (maildrop.check_password(argstr)) {
+        catch any {
+            mail_objects = maildrop.mail();
+            messages = map x in (mail_objects) to (.format_rfc822(x));
+        } with {
+            throw(~stop, "-ERR could not open maildrop");
+        }
+        state = 'transaction;
+        .print(((((("+OK " + (maildrop.namef('ref))) + " has ") + (messages.length())) + " messages (") + ((messages.omap(this(), 'message_size)).sum())) + " octets)");
+    } else {
+        throw(~stop, "-ERR authentication failed");
+    }
+};
+
+protected method .print() {
+    arg @args;
+    
+    (.connection()).write(@args);
+};
+
+protected method .quit_cmd() {
+    arg argstr;
+    var errors, x;
+    
+    if (state != 'transaction) {
+        .print("+OK Cold POP3 server signing off.");
+    } else {
+        for x in (deleted) {
+            catch any
+                maildrop.del_mail(mail_objects[x]);
+            with
+                errors++;
+        }
+        if (errors)
+            .print("-ERR some messages could not be deleted");
+        else
+            .print(("+OK Cold POP3 server signing off (" + ((maildrop.mail()) ? (((maildrop.mail()).length()) + " messages left") : "maildrop empty")) + ")");
+    }
+    return 'disconnect;
+};
+
+protected method .retr_cmd() {
+    arg argstr;
+    var msgnum, x;
+    
+    (> .check_state("RETR", 'transaction) <);
+    (> .check_valid_message((msgnum = toint(argstr))) <);
+    .print(("+OK " + (.message_size(messages[msgnum]))) + " octets");
+    for x in (messages[msgnum]) {
+        if (!x)
+            .print(x);
+        else
+            .print(((x[1]) == ".") ? ("." + x) : x);
+    }
+    .print(".");
+};
+
+protected method .rset_cmd() {
+    arg argstr;
+    
+    (> .check_state("RSET", 'transaction) <);
+    deleted = [];
+    .print(((("+OK maildrop has " + (messages.length())) + " messages (") + ((messages.omap(this(), 'message_size)).sum())) + " octets)");
+};
+
+protected method .stat_cmd() {
+    arg argstr;
+    var x, m;
+    
+    (> .check_state("STAT", 'transaction) <);
+    .print((("+OK " + ((m = .live_messages()).length())) + " ") + ((m.omap(this(), 'message_size)).sum()));
+};
+
+protected method .top_cmd() {
+    arg argstr;
+    var args, m, n, x, b;
+    
+    (> .check_state("TOP", 'transaction) <);
+    if (((args = argstr.explode()).length()) != 2)
+        throw(~stop, "-ERR command needs two arguments");
+    if ((n = toint(args[2])) < 0)
+        throw(~stop, "-ERR second argument must be a non-negative integer");
+    (> .check_valid_message((m = toint(args[1]))) <);
+    .print("+OK");
+    for x in (messages[m]) {
+        if (x)
+            .print(((x[1]) == ".") ? ("." + x) : x);
+        else
+            .print(x);
+        if (b) {
+            if (--n <= 0)
+                break;
+        } else if (!x) {
+            b++;
+        }
+    }
+    .print(".");
+};
+
+protected method .uidl_cmd() {
+    arg argstr;
+    var x;
+    
+    (> .check_state("UIDL", 'transaction) <);
+    if (argstr) {
+        (> .check_valid_message((x = toint(argstr))) <);
+        .print((("+OK " + x) + " ") + (.unique_id(messages[x])));
+    } else {
+        .print("+OK");
+        for x in [1 .. messages.length()] {
+            if (!(x in deleted))
+                .print((x + " ") + (.unique_id(messages[x])));
+        }
+        .print(".");
+    }
+};
+
+protected method .unique_id() {
+    arg message;
+    
+    return crypt(toliteral(message), "POP3").subrange(9);
+};
+
+protected method .user_cmd() {
+    arg argstr;
+    
+    (> .check_state("USER", 'authorization) <);
+    catch any
+        maildrop = $user_db.exact_match(argstr);
+    with
+        throw(~stop, "-ERR unknown user");
+    .print("+OK " + (maildrop.namef('ref)));
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/remote_cache.cdc	Sat Mar 14 15:49:04 1998
@@ -0,0 +1,48 @@
+
+new object $remote_cache: $command_cache;
+
+var $command_cache commands = 0;
+var $command_cache modules = [];
+var $dmi_data descriptions = #[];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $root created_on = 874702845;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$remote_cache];
+var $root manager = $remote_cache;
+
+public method .add_remote_command() {
+    arg @args;
+    
+    if (caller() != $has_commands)
+        throw(~perm, "Only $has_commands may call this method.");
+    return .add_to_cache(@args);
+};
+
+public method .del_remote_command() {
+    arg @args;
+    
+    if (caller() != $has_commands)
+        throw(~perm, "Only $has_commands may call this method.");
+    return .del_from_cache(@args);
+};
+
+public method .rehash_cache() {
+    var def, cmd;
+    
+    (> .perms(sender()) <);
+    
+    // oof, this is big and nasty.  We will need to pick through the
+    // whole db to find all remotely defined commands.  Dont do this
+    // often--it should keep itself up to date when they are added
+    // or removed.
+    for def in ($has_commands.descendants()) {
+        for cmd in ((def.remote_commands()).keys())
+            .add_to_cache(cmd, def);
+        refresh();
+    }
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/tagged_format.cdc	Sat Mar 14 15:49:03 1998
@@ -0,0 +1,28 @@
+
+new object $tagged_format: $plain_format;
+
+var $dmi_data descriptions = #[];
+var $root created_on = 888336074;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$tagged_format];
+var $root manager = $tagged_format;
+
+public method .do_dt() {
+    arg vars, flags, args;
+    
+    vars = vars.add('header, "");
+    [args, vars] = ._eval_ctext(args, vars);
+    if ((| vars['columned] |))
+        return ["\n  ", vars.add('header, pad("  " + args, 25 + ((args.length()) - ((.tag_text(args)).length()))))];
+    else
+        return [("\n  " + args) + "\n", vars.add('header, "")];
+};
+
+public method .tag_text() {
+    arg text;
+    
+    throw(~override, "Override me!!!");
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/tkmoo_format.cdc	Sat Mar 14 15:49:03 1998
@@ -0,0 +1,139 @@
+
+new object $tkmoo_format: $tagged_format;
+
+var $dmi_data descriptions = #[];
+var $root created_on = 888299262;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$tkmoo_format];
+var $root manager = $tkmoo_format;
+
+public method ._eval_ctext() {
+    arg data, vars, @unexpand;
+    var out, uflags, token;
+    
+    out = "";
+    if (type(data) != 'list)
+        data = [data];
+    for token in (data) {
+        refresh();
+        switch (type(token)) {
+            case 'frob:
+                switch (class(token)) {
+                    case $generator:
+                        [token, vars] = ((| vars['evaluator] |) || $bs_eval).eval_generator(token, vars);
+                        if (type(token) == 'string) {
+                            out += token;
+                        } else {
+                            [token, vars] = ._eval_ctext(token, vars, 1);
+                            out += token;
+                        }
+                    case $format:
+                        [token, vars] = .eval_formatter(token, vars);
+                        out += token;
+                }
+            case 'string:
+                out += unexpand ? token : (.escape(token));
+            case 'list:
+                [token, vars] = ._eval_ctext(token, vars, @unexpand);
+                out += token;
+            default:
+                out += token;
+        }
+    }
+    return [out, vars];
+};
+
+public method .build_link_tag() {
+    arg command, text;
+    
+    command = (((toliteral(command).replace("\\", "\\\\")).replace("{", "\{")).replace("}", "\}")).replace("\\", "\\\\");
+    text = (((toliteral(text).replace("\\", "\\\\")).replace("{", "\{")).replace("}", "\}")).replace("\\", "\\\\");
+    return ((("{link {command " + command) + "} {text ") + text) + "}}";
+};
+
+public method .do_detail() {
+    arg vars, flags, args;
+    var det;
+    
+    det = flags.getkey("name");
+    return [.build_link_tag("look " + det, det), vars];
+};
+
+public method .do_link() {
+    arg vars, flags, args;
+    var node;
+    
+    [args, vars] = ._eval_ctext([args[1]], vars);
+    node = (| flags.getkey("node") |);
+    if (node)
+        return [.build_link_tag("@help " + node, args), vars];
+    return [">>ERROR: Invalid help node<<", vars];
+};
+
+public method .do_method() {
+    arg vars, flags, args;
+    var out, vars, m;
+    
+    m = (flags[1])[1];
+    [out, vars] = ._eval_ctext(args, vars);
+    return [((("{link {command \"@list $" + m) + "\"} {text \"") + out) + "\"}}", vars];
+};
+
+public method .do_obj() {
+    arg vars, flags, args;
+    var gateway, argname, output, context, object, name, options, command, text;
+    
+    name = flags.getkey("name");
+    [name, vars] = ._eval_ctext([name], vars);
+    context = flags.getkey("context");
+    options = (| flags.getkey("options") |);
+    object = args[1];
+    if (type(context) == 'string)
+        context = tosym(context);
+    if (options && (type(options) == 'string))
+        options = tosym(options);
+    switch (context) {
+        case 'look:
+            if (options) {
+                switch (options) {
+                    case 'exit:
+                        command = object.name('noarticle);
+                        text = name;
+                    case 'contained:
+                        command = (("look " + ((object.location()).name('noarticle))) + "'s ") + (object.name('noarticle));
+                        text = name;
+                }
+            } else {
+                command = "look " + (object.name('noarticle));
+                text = name;
+            }
+        case 'display:
+            command = "go " + (object.name());
+            text = name;
+            command = "@display " + object;
+            text = name;
+        case 'exit:
+            command = "go " + (object.name());
+            text = name;
+    }
+    return [.build_link_tag(command, text), vars];
+};
+
+public method .escape() {
+    arg token;
+    
+    return (token.replace("{", "\{")).replace("}", "\}");
+};
+
+public method .tag_text() {
+    arg tag;
+    var match;
+    
+    match = tag.match_pattern("* {text \"*\"}*");
+    if (match)
+        return match[2];
+    throw(~invtag, "Tag had no text field.");
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/tutorial.cdc	Sat Mar 14 15:49:06 1998
@@ -0,0 +1,236 @@
+
+new object $tutorial: $place;
+
+var $command_cache modules = [];
+var $described prose = <$ctext_frob, [["This is the tutorial room. It's not part of any tutorial, and you probably shouldn't be here. Type", <$format, ["p", [], [], 'do_p]>, <$format, ["dfn", [], ["exit"], 'do_dfn]>, <$format, ["p", [], [], 'do_p]>, "now to get back to ", <$generator, ["servname", [], [], 'gen_servname]>, "."], #[]]>;
+var $dmi_data descriptions = #[];
+var $event_handler hooks = #[];
+var $has_commands local = \
+  #[["exit", [["exit", "", "exit", 'exit_cmd, #[]]]], ["n?ext|p?revious|m?ore|b?ack", [["n?ext|p?revious|m?ore|b?ack", "", "n?ext|p?revious|m?ore|b?ack", 'next_cmd, #[]]]]];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "Tutorial Room", "Tutorial Room"];
+var $location contents = [];
+var $place entrances = [];
+var $place exits = [];
+var $place realm = $realm_of_creation;
+var $root created_on = 874177642;
+var $root defined_settings = #[["next-topic", #[['parse, ['parse_topic_object]]]], ["prev-topic", #[['parse, ['parse_topic_object]]]], ["class", #[['parse, ['parse_tutorial_class]]]], ["start-topic", #[['parse, ['parse_topic_object, 'start_topic]]]], ["back-topic", #[['parse, ['parse_topic_object]]]], ["more-topic", #[['parse, ['parse_topic_object]]]]];
+var $root flags = ['variables, 'methods, 'code, 'core, 'general_cache];
+var $root inited = 1;
+var $root managed = [$tutorial];
+var $root manager = $tutorial;
+var $root quota_exempt = 1;
+var $root settings = #[["next-topic", ""], ["prev-topic", ""], ["class", ""], ["start-topic", ""], ["back-topic", ""], ["more-topic", ""], ["map-position", 0], ["propagate", 0]];
+var $tutorial tracking = 0;
+
+public method .announce() {
+    arg str, @whonot;
+    var p, msg;
+    
+    if ((!sender()) in (.contents()))
+        return;
+    if ((type(str) == 'frob) && ((class(str) == $message_frob) && (this() in (str.parts())))) {
+        p = str.get_part(this());
+        str = str.change_entry(this(), "general");
+    }
+    if ((!(sender() in whonot)) && (sender() in (.contents())))
+        (| sender().tell(str, sender()) |);
+    switch (type(str)) {
+        case 'string:
+            sender().tell(("[ Everyone else would see: " + str) + " ]");
+        case 'frob:
+            msg = ($parse_lib.filter_ctext(str, #[['formatter, $plain_format]])).to_strings();
+            if (((msg.length()) == 2) && ((msg[2]) == `[])) {
+                (| sender().tell(("[ Everyone else would see: " + (msg[1])) + " ]") |);
+            } else {
+                (| sender().tell("[-- Everyone else would see the following: --]") |);
+                (| sender().tell(p) |);
+                (| sender().tell("[-- End --]") |);
+            }
+    }
+};
+
+public method .description() {
+    arg @ignored;
+    var exit, out, lines, more, back;
+    
+    out = (> pass(@ignored) <);
+    lines = [];
+    
+    // back/more
+    if ((exit = .get_setting("back-topic", $tutorial)))
+        lines += [$cml_lib.format_obj_tag('look, (<$exit_frob, #[['source, this()], ['dest, exit]]>), "Back: " + (exit.name()), 'exit)];
+    if ((exit = .get_setting("more-topic", $tutorial))) {
+        if (lines)
+            lines += [" || "];
+        lines += [$cml_lib.format_obj_tag('look, (<$exit_frob, #[['source, this()], ['dest, exit]]>), "More: " + (exit.name()), 'exit)];
+    }
+    
+    // reset
+    if (lines) {
+        out += [$ctext_frob.new_with(["<< ", @lines, " >>"])];
+        lines = [];
+    }
+    
+    // prev/next
+    if ((exit = .get_setting("prev-topic", $tutorial)))
+        lines += [$cml_lib.format_obj_tag('look, (<$exit_frob, #[['source, this()], ['dest, exit]]>), "Previous: " + (exit.name()), 'exit)];
+    if ((exit = .get_setting("next-topic", $tutorial))) {
+        if (lines)
+            lines += [" || "];
+        lines += [$cml_lib.format_obj_tag('look, (<$exit_frob, #[['source, this()], ['dest, exit]]>), "Next: " + (exit.name()), 'exit)];
+    }
+    if (lines)
+        return out + [$ctext_frob.new_with(["<< ", @lines, " >>"])];
+    else
+        return out;
+};
+
+public method .did_arrive() {
+    arg old_place;
+    
+    pass(old_place);
+    (parents()[1]).track_user(sender(), old_place);
+};
+
+public method .did_leave() {
+    arg new_place;
+    
+    pass(new_place);
+    if (!(new_place.is(parents()[1])))
+        (parents()[1]).user_left(sender());
+};
+
+public method .exit_cmd() {
+    arg cmdstr, cmd, @who;
+    var source, n;
+    
+    source = (| ((parents()[1]).tracking(sender()))[1] |) || ($world.starting_place());
+    n = (((parents()[1]).name()).capitalize()) + " Tutorial.";
+    sender().tell("You leave the " + n);
+    (> sender().move_to(source) <);
+    source.announce(((sender().name()) + " returns from the ") + n, sender());
+};
+
+public method .format_contents() {
+    arg flags;
+    var users, br, exclude, actor, objects, output, obj, line, item, formatteduser, formattedobj;
+    
+    // called by .description
+    users = [];
+    objects = [];
+    actor = flags['actor];
+    exclude = (| flags['exclude] |) || [];
+    for obj in (.contents()) {
+        if ((!(obj in exclude)) && ((obj != actor) && (| obj.is_obvious_to(actor) |))) {
+            if (obj.has_ancestor($body))
+                users += [obj];
+            else
+                objects += [obj];
+        }
+    }
+    output = $ctext_frob.new_with([]);
+    br = $cml_lib.format_br_tag();
+    if (objects) {
+        formattedobj = map item in (objects) to ($cml_lib.format_obj_tag('look, item, item.name()));
+        formattedobj = ["You see ", $cml_lib.generate_english_tag(formattedobj), " here.", br];
+        line = $ctext_frob.new_with(formattedobj);
+    
+        //output += [br, line];
+        output = output.append(line);
+    }
+    return output;
+};
+
+public method .minclass() {
+    return (.get_setting("class", $tutorial)) || 0;
+};
+
+public method .next_cmd() {
+    arg cmd, cmdstr, @args;
+    var node, what;
+    
+    switch (cmd[1]) {
+        case "n":
+            what = "next";
+        case "p":
+            what = "prev";
+        case "m":
+            what = "more";
+        case "b":
+            what = "back";
+        default:
+            return "It seems this command is a little mis-configured.";
+    }
+    if (!(node = .get_setting(what + "-topic", $tutorial)))
+        return ((("There is no \"" + what) + "\" topic.  Type \"exit\" to leave the ") + (((parents()[1]).name()).capitalize())) + " Tutorial.";
+    sender().move_to(node);
+};
+
+public method .parse_topic_object() {
+    arg value, @args;
+    var obj, class;
+    
+    if (args) {
+        // for $tutorial:start-topic
+        class = this();
+    } else {
+        // for $tutorial:(next|prev)-topic
+        class = $tutorial;
+    }
+    if (!value)
+        return "";
+    obj = $object_lib.to_dbref(value);
+    if (!(obj.is(class)))
+        throw(~parse, "The topic must be a child of " + class);
+    return obj;
+};
+
+public method .parse_tutorial_class() {
+    arg value, @args;
+    var obj;
+    
+    if (!value)
+        return "";
+    obj = $object_lib.to_dbref(value);
+    if (!(obj.is($user)))
+        throw(~perm, "the class must be a user class");
+    return obj;
+};
+
+public method .track_user() {
+    arg user, prev;
+    var current;
+    
+    if (!tracking)
+        tracking = #[];
+    if (dict_contains(tracking, user))
+        current = tracking[user];
+    else
+        current = [prev, 0];
+    tracking = dict_add(tracking, user, replace(current, 2, sender()));
+};
+
+public method .tracking() {
+    arg user;
+    
+    return tracking[user];
+};
+
+public method .user_left() {
+    arg user;
+    
+    if (dict_contains(tracking || #[], user))
+        tracking = dict_del(tracking, user);
+};
+
+public method .will_arrive() {
+    arg old_place;
+    
+    pass(old_place);
+    if ((!((parents()[1]).is($tutorial))) || ((parents()[1]) == $tutorial))
+        throw(~perm, "Something is wrong with that tutorial topic, you cannot go there.");
+};
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/tutorial_realm.cdc	Sat Mar 14 15:49:07 1998
@@ -0,0 +1,15 @@
+
+new object $tutorial_realm: $realm;
+
+var $dmi_data descriptions = #[];
+var $has_name name = ['prop, "Tutorial", "Tutorial"];
+var $realm links = #[];
+var $realm local = [];
+var $root created_on = 874178606;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$tutorial_realm];
+var $root manager = $tutorial_realm;
+var $root settings = #[["map-position", 0], ["propagate", 0]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_hot.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,16 @@
+
+new object $weather_hot: $weather;
+
+var $described prose = [];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "hot", "hot"];
+var $root created_on = 855462673;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_hot];
+var $root manager = $weather_hot;
+var $root settings = #[["attributes", [5, 3, 4, 3, 3, 2]]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_nice.cdc	Sat Mar 14 15:49:09 1998
@@ -0,0 +1,17 @@
+
+new object $weather_nice: $weather;
+
+var $described prose = <$ctext_frob, [["The weather is nice. The sun is shining and all that."], #[['this, $weather_nice]]]>;
+var $foundation msgs = #[["invoke", #[["general", <$ctext_frob, [["The weather is clear and nice."], #[]]>]]]];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "nice", "nice"];
+var $root created_on = 855447987;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_nice];
+var $root manager = $weather_nice;
+var $root settings = #[["attributes", [1, 2, 2, 1, 1, 1]]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_rainy.cdc	Sat Mar 14 15:49:10 1998
@@ -0,0 +1,17 @@
+
+new object $weather_rainy: $weather;
+
+var $described prose = [];
+var $foundation msgs = #[["invoke", #[["general", <$ctext_frob, [["It starts to rain."], #[['this, $weather_rainy]]]>]]]];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "rainy", "rainy"];
+var $root created_on = 855463377;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_rainy];
+var $root manager = $weather_rainy;
+var $root settings = #[["attributes", [3, 3, 3, 3, 3, 1]]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_snowy.cdc	Sat Mar 14 15:49:10 1998
@@ -0,0 +1,17 @@
+
+new object $weather_snowy: $weather;
+
+var $described prose = [];
+var $foundation msgs = #[["invoke", #[["general", <$ctext_frob, [["It starts to snow."], #[]]>]]]];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "snowy", "snowy"];
+var $root created_on = 855463379;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_snowy];
+var $root manager = $weather_snowy;
+var $root settings = #[["attributes", [5, 2, 4, 2, 3, 1]]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_stormy.cdc	Sat Mar 14 15:49:10 1998
@@ -0,0 +1,16 @@
+
+new object $weather_stormy: $weather;
+
+var $described prose = [];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "stormy", "stormy"];
+var $root created_on = 855462768;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_stormy];
+var $root manager = $weather_stormy;
+var $root settings = #[["attributes", [4, 3, 2, 3, 3, 3]]];
+
+
--- /dev/null	Sat Mar 14 12:19:19 1998
+++ ColdCore-3.0a10/src/weather_windy.cdc	Sat Mar 14 15:49:10 1998
@@ -0,0 +1,17 @@
+
+new object $weather_windy: $weather;
+
+var $described prose = [];
+var $foundation msgs = #[["invoke", #[["general", <$ctext_frob, [["The wind blows in strong gusts."], #[]]>]]]];
+var $has_commands local = #[];
+var $has_commands remote = #[];
+var $has_commands shortcuts = #[];
+var $has_name name = ['prop, "stormy", "stormy"];
+var $root created_on = 855462710;
+var $root flags = ['variables, 'methods, 'code, 'core];
+var $root inited = 1;
+var $root managed = [$weather_windy];
+var $root manager = $weather_windy;
+var $root settings = #[["attributes", [4, 3, 4, 3, 3, 3]]];
+
+