ds2.4.1/bin/
ds2.4.1/extra/creremote/
ds2.4.1/extra/wolfpaw/
ds2.4.1/lib/cmds/admins/
ds2.4.1/lib/cmds/common/
ds2.4.1/lib/cmds/creators/include/
ds2.4.1/lib/cmds/creators/include/SCCS/
ds2.4.1/lib/daemon/services/
ds2.4.1/lib/doc/
ds2.4.1/lib/doc/efun/all/
ds2.4.1/lib/doc/efun/arrays/
ds2.4.1/lib/doc/efun/buffers/
ds2.4.1/lib/doc/efun/compile/
ds2.4.1/lib/doc/efun/floats/
ds2.4.1/lib/doc/efun/functions/
ds2.4.1/lib/doc/efun/general/
ds2.4.1/lib/doc/efun/mixed/
ds2.4.1/lib/doc/efun/numbers/
ds2.4.1/lib/doc/efun/parsing/
ds2.4.1/lib/doc/faq/
ds2.4.1/lib/doc/hbook/
ds2.4.1/lib/doc/help/classes/
ds2.4.1/lib/doc/help/races/
ds2.4.1/lib/doc/lfun/
ds2.4.1/lib/doc/lfun/all/
ds2.4.1/lib/doc/lfun/lib/abilities/
ds2.4.1/lib/doc/lfun/lib/armor/
ds2.4.1/lib/doc/lfun/lib/bot/
ds2.4.1/lib/doc/lfun/lib/clay/
ds2.4.1/lib/doc/lfun/lib/clean/
ds2.4.1/lib/doc/lfun/lib/client/
ds2.4.1/lib/doc/lfun/lib/combat/
ds2.4.1/lib/doc/lfun/lib/connect/
ds2.4.1/lib/doc/lfun/lib/corpse/
ds2.4.1/lib/doc/lfun/lib/creator/
ds2.4.1/lib/doc/lfun/lib/daemon/
ds2.4.1/lib/doc/lfun/lib/damage/
ds2.4.1/lib/doc/lfun/lib/deterioration/
ds2.4.1/lib/doc/lfun/lib/donate/
ds2.4.1/lib/doc/lfun/lib/door/
ds2.4.1/lib/doc/lfun/lib/equip/
ds2.4.1/lib/doc/lfun/lib/file/
ds2.4.1/lib/doc/lfun/lib/fish/
ds2.4.1/lib/doc/lfun/lib/flashlight/
ds2.4.1/lib/doc/lfun/lib/follow/
ds2.4.1/lib/doc/lfun/lib/ftp_client/
ds2.4.1/lib/doc/lfun/lib/ftp_data_connection/
ds2.4.1/lib/doc/lfun/lib/fuel/
ds2.4.1/lib/doc/lfun/lib/genetics/
ds2.4.1/lib/doc/lfun/lib/id/
ds2.4.1/lib/doc/lfun/lib/interactive/
ds2.4.1/lib/doc/lfun/lib/lamp/
ds2.4.1/lib/doc/lfun/lib/leader/
ds2.4.1/lib/doc/lfun/lib/light/
ds2.4.1/lib/doc/lfun/lib/limb/
ds2.4.1/lib/doc/lfun/lib/living/
ds2.4.1/lib/doc/lfun/lib/look/
ds2.4.1/lib/doc/lfun/lib/manipulate/
ds2.4.1/lib/doc/lfun/lib/meal/
ds2.4.1/lib/doc/lfun/lib/messages/
ds2.4.1/lib/doc/lfun/lib/npc/
ds2.4.1/lib/doc/lfun/lib/player/
ds2.4.1/lib/doc/lfun/lib/poison/
ds2.4.1/lib/doc/lfun/lib/position/
ds2.4.1/lib/doc/lfun/lib/potion/
ds2.4.1/lib/doc/lfun/lib/room/
ds2.4.1/lib/doc/lfun/lib/server/
ds2.4.1/lib/doc/lfun/lib/spell/
ds2.4.1/lib/doc/lfun/lib/torch/
ds2.4.1/lib/doc/lfun/lib/vendor/
ds2.4.1/lib/doc/lfun/lib/virt_sky/
ds2.4.1/lib/doc/lfun/lib/weapon/
ds2.4.1/lib/doc/lfun/lib/worn_storage/
ds2.4.1/lib/doc/lpc/basic/
ds2.4.1/lib/doc/lpc/concepts/
ds2.4.1/lib/doc/lpc/constructs/
ds2.4.1/lib/doc/lpc/etc/
ds2.4.1/lib/doc/lpc/intermediate/
ds2.4.1/lib/doc/lpc/types/
ds2.4.1/lib/doc/misc/
ds2.4.1/lib/doc/old/
ds2.4.1/lib/domains/Praxis/adm/
ds2.4.1/lib/domains/Praxis/attic/
ds2.4.1/lib/domains/Praxis/cemetery/mon/
ds2.4.1/lib/domains/Praxis/data/
ds2.4.1/lib/domains/Praxis/death/
ds2.4.1/lib/domains/Praxis/mountains/
ds2.4.1/lib/domains/Praxis/obj/armour/
ds2.4.1/lib/domains/Praxis/obj/magic/
ds2.4.1/lib/domains/Praxis/obj/weapon/
ds2.4.1/lib/domains/Praxis/orc_valley/
ds2.4.1/lib/domains/Ylsrim/
ds2.4.1/lib/domains/Ylsrim/adm/
ds2.4.1/lib/domains/Ylsrim/armor/
ds2.4.1/lib/domains/Ylsrim/broken/
ds2.4.1/lib/domains/Ylsrim/fish/
ds2.4.1/lib/domains/Ylsrim/meal/
ds2.4.1/lib/domains/Ylsrim/npc/
ds2.4.1/lib/domains/Ylsrim/obj/
ds2.4.1/lib/domains/Ylsrim/virtual/
ds2.4.1/lib/domains/Ylsrim/weapon/
ds2.4.1/lib/domains/campus/adm/
ds2.4.1/lib/domains/campus/etc/
ds2.4.1/lib/domains/campus/meals/
ds2.4.1/lib/domains/campus/npc/
ds2.4.1/lib/domains/campus/save/
ds2.4.1/lib/domains/campus/txt/ai/charles/
ds2.4.1/lib/domains/campus/txt/ai/charles/bak2/
ds2.4.1/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.4.1/lib/domains/campus/txt/ai/charly/
ds2.4.1/lib/domains/campus/txt/ai/charly/bak/
ds2.4.1/lib/domains/campus/txt/jenny/
ds2.4.1/lib/domains/default/creator/
ds2.4.1/lib/domains/default/doors/
ds2.4.1/lib/domains/default/etc/
ds2.4.1/lib/domains/default/weap/
ds2.4.1/lib/domains/town/doors/
ds2.4.1/lib/domains/town/txt/shame/
ds2.4.1/lib/domains/town/virtual/
ds2.4.1/lib/lib/comp/
ds2.4.1/lib/lib/lvs/
ds2.4.1/lib/lib/user/
ds2.4.1/lib/lib/virtual/
ds2.4.1/lib/log/
ds2.4.1/lib/obj/book_source/
ds2.4.1/lib/obj/include/
ds2.4.1/lib/realms/template/
ds2.4.1/lib/realms/template/adm/
ds2.4.1/lib/realms/template/area/armor/
ds2.4.1/lib/realms/template/area/npc/
ds2.4.1/lib/realms/template/area/obj/
ds2.4.1/lib/realms/template/area/room/
ds2.4.1/lib/realms/template/area/weap/
ds2.4.1/lib/realms/template/bak/
ds2.4.1/lib/realms/template/cmds/
ds2.4.1/lib/save/kills/o/
ds2.4.1/lib/secure/cfg/
ds2.4.1/lib/secure/cfg/classes/
ds2.4.1/lib/secure/cmds/creators/include/
ds2.4.1/lib/secure/cmds/players/
ds2.4.1/lib/secure/cmds/players/include/
ds2.4.1/lib/secure/daemon/include/
ds2.4.1/lib/secure/lib/
ds2.4.1/lib/secure/lib/include/
ds2.4.1/lib/secure/lib/net/include/
ds2.4.1/lib/secure/lib/std/
ds2.4.1/lib/secure/modules/
ds2.4.1/lib/secure/npc/
ds2.4.1/lib/secure/obj/include/
ds2.4.1/lib/secure/room/
ds2.4.1/lib/secure/save/
ds2.4.1/lib/secure/save/boards/
ds2.4.1/lib/secure/save/players/g/
ds2.4.1/lib/secure/scripts/
ds2.4.1/lib/secure/tmp/
ds2.4.1/lib/secure/upgrades/files/
ds2.4.1/lib/secure/verbs/creators/
ds2.4.1/lib/shadows/
ds2.4.1/lib/spells/
ds2.4.1/lib/std/board/
ds2.4.1/lib/std/lib/
ds2.4.1/lib/tmp/
ds2.4.1/lib/verbs/admins/include/
ds2.4.1/lib/verbs/common/
ds2.4.1/lib/verbs/common/include/
ds2.4.1/lib/verbs/creators/include/
ds2.4.1/lib/verbs/players/include/SCCS/
ds2.4.1/lib/verbs/rooms/
ds2.4.1/lib/verbs/rooms/include/
ds2.4.1/lib/www/errors/
ds2.4.1/lib/www/images/
ds2.4.1/v22.2b14/
ds2.4.1/v22.2b14/ChangeLog.old/
ds2.4.1/v22.2b14/Win32/
ds2.4.1/v22.2b14/compat/
ds2.4.1/v22.2b14/compat/simuls/
ds2.4.1/v22.2b14/include/
ds2.4.1/v22.2b14/testsuite/
ds2.4.1/v22.2b14/testsuite/clone/
ds2.4.1/v22.2b14/testsuite/command/
ds2.4.1/v22.2b14/testsuite/data/
ds2.4.1/v22.2b14/testsuite/etc/
ds2.4.1/v22.2b14/testsuite/include/
ds2.4.1/v22.2b14/testsuite/inherit/
ds2.4.1/v22.2b14/testsuite/inherit/master/
ds2.4.1/v22.2b14/testsuite/log/
ds2.4.1/v22.2b14/testsuite/single/
ds2.4.1/v22.2b14/testsuite/single/tests/compiler/
ds2.4.1/v22.2b14/testsuite/single/tests/efuns/
ds2.4.1/v22.2b14/testsuite/single/tests/operators/
ds2.4.1/v22.2b14/testsuite/u/
ds2.4.1/v22.2b14/tmp/
ds2.4.1/win32/
#include <lib.h>
#include <daemons.h>

inherit LIB_DAEMON;

static void eventUpdate() {

    if(!file_exists("/secure/tmp/update.lock")){
	string config_file = read_file("/secure/include/config.h");
        string native = read_file( (file_exists("/secure/sefun/native_version.c") ?
"/secure/sefun/native_version.c" : "/secure/scripts/native_version.proto"));
        string ver = mudlib_version();
        string mudinfo = replace_string(read_file("/secure/sefun/mud_info.c"),
                ver,"2.3a20");
        string native_rev = replace_string((native ? native :
"string native_version() { return \"UNKNOWN\";}"),
                "UNKNOWN",ver);
        write_file("/secure/sefun/mud_info.c",mudinfo,1);
        write_file("/secure/sefun/native_version.c",native_rev,1);
        tc("ver: "+ver);
        tc("native: "+native);

	load_object("/secure/cmds/admins/removeraces")->cmd();
	write_file("/secure/tmp/update.lock","The mud will probably reboot twice.");

	if(sizeof(config_file)){

	    if(!grepp(config_file, "PLAYER_KILL")) 
		config_file = append_line(config_file,"GLOBAL_MONITOR",
		  "#define PLAYER_KILL              1");

	    if(!grepp(config_file, "HOST_IP"))
		config_file = append_line(config_file,"DEFAULT_PROMPT",
		  "#define HOST_IP                  \"127.0.0.1\"");

	    if(!grepp(config_file, "LOCAL_TIME"))
		config_file = append_line(config_file,"GMT_OFFSET",
		  "#define LOCAL_TIME               1");

	    if(!grepp(config_file, "EXTRA_TIME_OFFSET"))
		config_file = append_line(config_file,"LOCAL_TIME",
		  "#define EXTRA_TIME_OFFSET        0");

	    if(!grepp(config_file, "NPC_CATCH_TELL_DEBUG"))
		config_file = append_line(config_file,"PLAYER_KILL",
		  "#define NPC_CATCH_TELL_DEBUG     0");

	    if(!grepp(config_file, "SAME_IP_MAX"))
		config_file = append_line(config_file,"NPC_CATCH_TELL_DEBUG",
		  "#define SAME_IP_MAX              4");

	    if(!grepp(config_file, "COMPAT_MODE"))
		config_file = append_line(config_file,"SAME_IP_MAX",
		  "#define COMPAT_MODE              1");

	    if(!grepp(config_file, "RETAIN_ON_QUIT"))
		config_file = append_line(config_file,"COMPAT_MODE",
		  "#define RETAIN_ON_QUIT           1");

	    if(!grepp(config_file, "MAX_COMMANDS_PER_SECOND"))
		config_file = append_line(config_file,"RETAIN_ON_QUIT",
		  "#define MAX_COMMANDS_PER_SECOND  10");

	    if(!grepp(config_file, "DEFAULT_PARSING"))
		config_file = append_line(config_file,"MAX_COMMANDS_PER_SECOND",
		  "#define DEFAULT_PARSING          0");


	    if(!grepp(config_file, "CALL_OUT_LOGGING")){
		string thing = "// Note: call_out logging breaks a lot of code.\n";
		thing += "// only use it in extremis. Reboot when activating\n";
		thing += "// or deactivating it.\n";
		thing += "#define CALL_OUT_LOGGING         0";
		config_file = append_line(config_file,"DEFAULT_PARSING",thing);
	    }

	    if(!grepp(config_file, "EVENTS_LOGGING"))
		config_file = append_line(config_file,"CALL_OUT_LOGGING",
		  "#define EVENTS_LOGGING           1");

	    if(!grepp(config_file, "DISABLE_REBOOTS"))
		config_file = append_line(config_file,"EVENTS_LOGGING",
		  "#define DISABLE_REBOOTS          0");

	    if(!grepp(config_file, "BARE_EXITS"))
		config_file = append_line(config_file,"DISABLE_REBOOTS",
		  "#define BARE_EXITS               1");;

	    if(!grepp(config_file, "COMMAND_MATCHING"))
		config_file = append_line(config_file,"BARE_EXITS",
		  "#define COMMAND_MATCHING         0");;

	    if(!grepp(config_file, "OBJECT_MATCHING"))
		config_file = append_line(config_file,"COMMAND_MATCHING",
		  "#define OBJECT_MATCHING          0");

	    if(!grepp(config_file, "LIVEUPGRADE_SERVER"))
		config_file = append_line(config_file,"OBJECT_MATCHING",
		  "#define LIVEUPGRADE_SERVER       \"Dead Souls\"");

            if(!grepp(config_file, "CARRIAGE_RETURN"))
                config_file = append_line(config_file,"LIVEUPGRADE_SERVER",
                  "#define CARRIAGE_RETURN          \"\r\"");

            if(!grepp(config_file, "OLD_STYLE_PLURALS"))
                config_file = append_line(config_file,"CARRIAGE_RETURN",
                  "#define OLD_STYLE_PLURALS        1");

	    write_file("/secure/include/config.h", config_file+"\n", 1);
	}

	load_object("/secure/cmds/admins/addraces")->cmd();

	debug_message("\nUpgrade is half done. Performing the first of two reboots.\n");
	debug_message("\nYou can safely ignore errors seen here.\n");
	call_out( (: shutdown :), 2);
    }

    else {
        string newfile = "#include <lib.h>\n";
	newfile += "\n";
	newfile += "inherit LIB_DAEMON;\n";
	newfile += "\n";
	newfile += "static void eventUpdate() {}\n";
	newfile += "\n";
	newfile += "static void create() {\n";
	newfile += "    daemon::create();\n";
	newfile += "    call_out((: eventUpdate :), 60);\n";
	newfile += "}\n";


	rm("/secure/tmp/update.lock");
	rm("/doc/sefun/tell_room");
	rm("/www/ds-lpu-faq.html");
	rm("/spells/resurrection.c");
	rm("/cmds/creators/move.c");
	rmdir("/domains/town/secure");
	rm("/secure/cmds/creators/force.c");
	rm("/secure/cmds/creators/locate.c");
	rm("/secure/cmds/creators/banish.c");
	rm("/secure/daemon/players.h");
	rm("/secure/daemon/player.c");
	rm("/secure/cmds/router.c");
	rm("/secure/cmds/creators/roommaker.c");
	rm("/secure/sefun/groups.c");
	rm("/save/intermud.o");
	rm("/lib/guild.c");
	rm("/www/doc/ds-faq.html");
	rm("/www/doc/ds-admin-faq.html");
	rm("/www/doc/editor");
	rm("/www/doc/example");
	rm("/lib/include/guild.h");
	rm("/doc/help/players/thief");
	rm("/doc/help/players/mage");
	rm("/doc/help/players/cleric");
	rm("/cmds/admins/gate.c");
	rm("/cmds/admins/stargate.c");
	rm("/www/doc/ds-admin-faq.html");
	rm("/www/doc/ds-faq.html");
	rm("/www/doc/editor.html");
	rm("/www/doc/example.html");
	update("/daemon/intermud");
	mkdir("/secure/log/adm");
	rm("/cmds/creators/move.c");
	rm("/secure/obj/roommaker.c");
	mkdir("/secure/log/bak");
	rm("/cmds/creators/move.c");
	rm("/domains/campus/meals/red_wine.c");
	rm("/domains/campus/meals/wing.c");
	rm("/secure/cmds/creators/force.c");
	rm("/secure/tmp/update.lock");
	rm("/daemon/preload_check.c");
	rm("/cmds/creators/home.c");
	rm("/doc/sefun/GetCustomCommand");
	rm("/doc/sefun/GetCustomPath");
	rm("/domains/campus/obj/list.c");
	rm("/domains/campus/txt/list.txt");
	rm("/lib/props/getlivings.c");
	rm("/lib/props/poisoning.c");
	rm("/secure/daemon/update.patch");
	rm("/secure/daemon/update.new");
        rm("/cmds/creators/people.c");
        rm("/secure/daemon/i3router/socket_stuff.h");
        rm("/save/events.c");
        mkdir("/domains/campus/save");
      
        reload(MASTER_D);
        reload(CMD_D);

        PLAYERS_D->CompileCreList();
        PLAYERS_D->CompilePlayerList();

        rename("/secure/daemon/update.c", "/secure/daemon/update.patch");
	write_file("/secure/daemon/update.c",newfile,1);

	debug_message("\nUpgrade is done. Performing the last of two reboots.\n");
	//debug_message("\nYou can safely ignore errors seen here.\n");
	call_out( (: shutdown :), 2);
    }
}

static void create() {
    daemon::create();
    call_out((: eventUpdate :), 2);
}