Method code for $sys.make_core()

[Turn off line numbering]
  1: arg ver;
  2: var obj, obj2, d, o, top, x, admin, tmp, name;
  3: 
  4: // core rooms should be +core, and cant be destroyed
  5: // traverse the list inverseley, less unseen heirarchial shuffling
  6: .add_var('__making_core);
  7: dblog("** Starting Core Extraction " + ctime());
  8: d = $root.descendants();
  9: top = listlen(d);
 10: core_version = ver;
 11: dblog("** " + top + " objects total, tidying up core objects...");
 12: 
 13: // tidy up core objects first
 14: for obj in (d) {
 15:     refresh();
 16:     if (obj.has_flag('core)) {
 17:         tmp++;
 18:         catch any {
 19:             obj.change_manager(obj);
 20:             for o in (obj.writers('literal)) {
 21:                 refresh();
 22:                 obj.del_writer(o);
 23:             }
 24:         } with {
 25:             dblog("** TIDY " + obj + " traceback: ");
 26:             for o in ($parse_lib.traceback(traceback()))
 27:                 dblog("**   " + o);
 28:         }
 29:     }
 30: }
 31: 
 32: // nuke anything not core
 33: dblog("** " + tmp + " core objects, destroying non-core objects...");
 34: for x in [1 .. top] {
 35:     pause();
 36:     obj = d[top - x + 1];
 37:     if (!valid(obj)) {
 38:         // dblog(".. Skipping invalid object " + obj);
 39:         continue;
 40:     }
 41:     if (!obj.has_flag('core)) {
 42:         if (obj.children()) {
 43:             for obj2 in (obj.children()) {
 44:                 if (obj2.has_flag('core)) {
 45:                     dblog("** ABORTING: A NON CORE OBJECT HAS CORE CHILDREN: ");
 46:                     dblog("** " + obj + " => " + obj.children());
 47:                     shutdown();
 48:                 }
 49:             }
 50:         }
 51:         catch any {
 52:             // dblog(".. Destroying " + obj);
 53:             obj.destroy();
 54:         } with {
 55:             dblog("** " + obj + ".destroy() traceback: ");
 56:             for o in ($parse_lib.traceback(traceback()))
 57:                 dblog("**   " + o);
 58:         }
 59:     }
 60: }
 61: 
 62: // shutdown this task so that references can have
 63: // a chance to clear out, on destroyed objects.
 64: dblog("** done, suspending for new task **");
 65: 
 66: // do this the hard way, to be secure--wait a little while for
 67: // things to wrapup, five seconds should be fine.
 68: pause();
 69: set_heartbeat(5);
 70: .add_var('TMP_HEARTBEAT_CODE, .list_method('heartbeat));
 71: .add_method([".finish_core();"], 'heartbeat);

["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]

the Cold Dark