/* boot.c */

#define SAVE_DELAY 3600

listen(arg) { send_device(arg); }

static save_db() {
  alarm(SAVE_DELAY,"save_db");
  sysctl(0);
}

static init() {
  object wizobj;
  object me;

  me=this_object();
  if (prototype(this_object())) {
    alarm(SAVE_DELAY,"save_db");
    unhide("/README",me,1);
    unhide("/include",me,5);
    unhide("/include/secure.h",me,1);
    unhide("/help",me,5);
    unhide("/help/player",me,1);
    unhide("/help/builder",me,1);
    unhide("/help/programmer",me,1);
    unhide("/help/wizard",me,1);
    unhide("/help/manual",me,1);
    unhide("/sys",me,5);
    unhide("/sys/help1.c",me,1);
    unhide("/sys/help2.c",me,1);
    unhide("/sys/help3.c",me,1);
    unhide("/sys/help4.c",me,1);
    unhide("/sys/help5.c",me,1);
    unhide("/sys/login.c",me,1);
    unhide("/sys/wizcompile.c",me,1);
    unhide("/login_banner",me,1);
    unhide("/include/sys.h",me,1);
    unhide("/obj",me,5);
    unhide("/obj/weapon.c",me,1);
    unhide("/obj/corpse.c",me,1);
    unhide("/obj/monster.c",me,1);
    unhide("/obj/wiz.c",me,1);
    unhide("/obj/player.c",me,1);
    unhide("/sys/sys.c",me,1);
    unhide("/obj/room.c",me,1);
    unhide("/sys/combat_def.c",me,1);
    unhide("/obj/exit.c",me,1);
    unhide("/include/combat_def.h",me,1);
    unhide("/include/flags.h",me,1);
    unhide("/include/weapon.h",me,1);
    unhide("/include/armor.h",me,1);
    unhide("/obj/armor.c",me,1);
    unhide("/obj/shop.c",me,1);
    unhide("/obj/object.c",me,1);
    unhide("/obj/coins.c",me,1);
    compile_object("/sys/login");
    set_priv(compile_object("/sys/sys"));
    compile_object("/sys/wizcompile");
    compile_object("/obj/room");
    compile_object("/obj/exit");
    compile_object("/obj/player");
    compile_object("/obj/armor");
    compile_object("/obj/shop");
    compile_object("/obj/object");
    compile_object("/sys/help1");
    compile_object("/sys/help2");
    compile_object("/sys/help3");
    compile_object("/sys/help4");
    compile_object("/sys/help5");
    compile_object("/obj/coins");
    compile_object("/obj/wiz");
    compile_object("/sys/combat_def");
    compile_object("/obj/weapon");
    compile_object("/obj/corpse");
    compile_object("/obj/monster");
    set_priv(atoo("/sys/sys"));
    wizobj=clone_object("/obj/wiz");
    call_other(wizobj,"set_secure");
    call_other(wizobj,"set_name","Wizard");
    call_other(wizobj,"set_password","potrzebie");
    call_other(wizobj,"set_programmer",1);
    set_priv(wizobj);
  } else {
    destruct(this_object());
  }
}

get_uid() {
  return "root";
}

static connect() {
  object login_obj;

  login_obj=clone_object("/sys/login");
  if (!login_obj) {
    send_device(otoa(this_object())+": unable to clone /sys/login\n");
    disconnect_device();
    return;
  }
  /* for secure.h */
  call_other(login_obj,"set_secure");
  if (reconnect_device(login_obj)) {
    send_device(otoa(this_object())+": unable to reconnect to "+
                otoa(login_obj)+"\n");
    disconnect_device();
    destruct(login_obj);
    return;
  }
  set_priv(login_obj);
  call_other(login_obj,"connect");
}