dsIIr4/bin/
dsIIr4/extra/creremote/
dsIIr4/extra/wolfpaw/
dsIIr4/lib/cmds/admins/
dsIIr4/lib/cmds/common/
dsIIr4/lib/cmds/creators/include/
dsIIr4/lib/cmds/creators/include/SCCS/
dsIIr4/lib/daemon/services/
dsIIr4/lib/doc/
dsIIr4/lib/domains/Ylsrim/
dsIIr4/lib/domains/Ylsrim/adm/
dsIIr4/lib/domains/Ylsrim/armor/
dsIIr4/lib/domains/Ylsrim/broken/
dsIIr4/lib/domains/Ylsrim/fish/
dsIIr4/lib/domains/Ylsrim/meal/
dsIIr4/lib/domains/Ylsrim/npc/
dsIIr4/lib/domains/Ylsrim/virtual/
dsIIr4/lib/domains/Ylsrim/weapon/
dsIIr4/lib/domains/campus/adm/
dsIIr4/lib/domains/campus/etc/
dsIIr4/lib/domains/campus/meals/
dsIIr4/lib/domains/campus/npc/
dsIIr4/lib/domains/campus/save/
dsIIr4/lib/domains/campus/txt/
dsIIr4/lib/domains/campus/txt/ai/charles/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsIIr4/lib/domains/campus/txt/ai/charly/
dsIIr4/lib/domains/campus/txt/ai/charly/bak/
dsIIr4/lib/domains/campus/txt/jenny/
dsIIr4/lib/domains/default/creator/
dsIIr4/lib/domains/default/doors/
dsIIr4/lib/domains/default/etc/
dsIIr4/lib/domains/default/virtual/
dsIIr4/lib/domains/default/weap/
dsIIr4/lib/domains/town/virtual/
dsIIr4/lib/lib/comp/
dsIIr4/lib/lib/lvs/
dsIIr4/lib/lib/user/
dsIIr4/lib/lib/virtual/
dsIIr4/lib/log/
dsIIr4/lib/obj/book_source/
dsIIr4/lib/obj/include/
dsIIr4/lib/realms/template/
dsIIr4/lib/realms/template/adm/
dsIIr4/lib/realms/template/area/armor/
dsIIr4/lib/realms/template/area/npc/
dsIIr4/lib/realms/template/area/obj/
dsIIr4/lib/realms/template/area/room/
dsIIr4/lib/realms/template/area/weap/
dsIIr4/lib/realms/template/bak/
dsIIr4/lib/realms/template/cmds/
dsIIr4/lib/save/
dsIIr4/lib/save/kills/o/
dsIIr4/lib/secure/cfg/classes/
dsIIr4/lib/secure/cmds/creators/include/
dsIIr4/lib/secure/cmds/players/
dsIIr4/lib/secure/cmds/players/include/
dsIIr4/lib/secure/daemon/include/
dsIIr4/lib/secure/lib/
dsIIr4/lib/secure/lib/include/
dsIIr4/lib/secure/lib/net/include/
dsIIr4/lib/secure/lib/std/
dsIIr4/lib/secure/modules/
dsIIr4/lib/secure/npc/
dsIIr4/lib/secure/obj/include/
dsIIr4/lib/secure/room/
dsIIr4/lib/secure/save/
dsIIr4/lib/secure/save/boards/
dsIIr4/lib/secure/save/players/g/
dsIIr4/lib/secure/tmp/
dsIIr4/lib/secure/verbs/creators/
dsIIr4/lib/shadows/
dsIIr4/lib/spells/
dsIIr4/lib/std/board/
dsIIr4/lib/std/lib/
dsIIr4/lib/tmp/
dsIIr4/lib/verbs/admins/include/
dsIIr4/lib/verbs/common/
dsIIr4/lib/verbs/common/include/
dsIIr4/lib/verbs/creators/include/
dsIIr4/lib/verbs/players/include/SCCS/
dsIIr4/lib/verbs/rooms/
dsIIr4/lib/verbs/rooms/include/
dsIIr4/lib/www/
dsIIr4/v22.2b14-dsouls2/
dsIIr4/v22.2b14-dsouls2/ChangeLog.old/
dsIIr4/v22.2b14-dsouls2/Win32/
dsIIr4/v22.2b14-dsouls2/compat/
dsIIr4/v22.2b14-dsouls2/compat/simuls/
dsIIr4/v22.2b14-dsouls2/include/
dsIIr4/v22.2b14-dsouls2/mudlib/
dsIIr4/v22.2b14-dsouls2/testsuite/
dsIIr4/v22.2b14-dsouls2/testsuite/clone/
dsIIr4/v22.2b14-dsouls2/testsuite/command/
dsIIr4/v22.2b14-dsouls2/testsuite/data/
dsIIr4/v22.2b14-dsouls2/testsuite/etc/
dsIIr4/v22.2b14-dsouls2/testsuite/include/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/master/
dsIIr4/v22.2b14-dsouls2/testsuite/log/
dsIIr4/v22.2b14-dsouls2/testsuite/single/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/compiler/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/efuns/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/operators/
dsIIr4/v22.2b14-dsouls2/testsuite/u/
dsIIr4/v22.2b14-dsouls2/tmp/
dsIIr4/win32/
/*    /lib/enter.c
 *    From the Dead Souls Object Library
 *    Allows objects to provide an entry portal into another place
 *    Created by Descartes of Borg 961015
 *    Version: @(#) enter.c 1.4@(#)
 *    Last modified: 97/01/02
 */

#include <position.h>

private string Dir;
private string Door = 0;
private mapping Enter = 0;

static void create() {
    Dir = "/" + implode(explode(file_name(), "/")[0..<2], "/");
}

string ResolveObjectName(string file) {
    if( file[<2..] == ".c" ) file = file[0..<3];
    return absolute_path(Dir, file);
}

mixed direct_close_obj(object target) {
    if( !Door ) {
	return 0;
    }
    else {
	return Door->CanClose(this_player());
    }
}

mixed direct_enter_obj() {
    if( !Enter ) {
	return environment()->GetEnterMessage();
    }
    else {
	return 1;
    }
}

mixed direct_enter_into_obj() {
    return direct_enter_obj();
}

varargs mixed direct_lock_obj_with_obj(object target, object tool) {
    if( !Door ) {
	return 0;
    }
    else {
	return Door->CanLock(this_player());
    }
}

mixed direct_open_obj(object target) {
    if( !Door ) {
	return 0;
    }
    else {
	return Door->CanOpen(this_player());
    }
}

mixed direct_open_obj_with_obj(object target, object ob) {
    return direct_open_obj(target);
}

mixed direct_pick_str_on_obj(string str, object ob, string id1, string id2) {
    if( !Door || remove_article(lower_case(str)) != "lock" ) {
	return 0;
    }
    else {
	return Door->CanPick(this_player(), remove_article(lower_case(id2)));
    }
}

mixed direct_pick_str_on_obj_with_obj(string str, object ob, object w,
  string id1, string id2, string id3) {
    return direct_pick_str_on_obj(str, ob, id1, id2);
}

mixed direct_unlock_obj_with_obj(object target, object w) {
    if( !Door ) {
	return 0;
    }
    else {
	return Door->CanUnlock(this_player());
    }
}

mixed eventClose(object who) {
    return Door->eventClose(who);
}

varargs mixed eventEnter(object who, string what, string verb) {
    if(!verb) verb = "NOVERB";
    if( Door && Door->GetClosed() ) {
	who->eventPrint("You bump into " + Door->GetShort(what) + ".");
	environment(who)->eventPrint(who->GetName() + " bumps into " +
	  Door->GetShort(what) + ".", who);
	return 1;
    }
    if( who->GetPosition() != POSITION_STANDING ) {
	if(verb != "crawl" && verb != "fly") who->eventStand();
	if( who->GetPosition() != POSITION_STANDING && verb != "crawl" 
	  && verb != "fly") {
	    who->eventPrint("weird.");
	    return 0;
	}
    }
    if( Enter["pre"] && !evaluate(Enter["pre"], what) ) {
	return 1;
    }
    if(verb == "crawl") who->eventMoveLiving(Enter["room"],"into the " + what );
    else who->eventMoveLiving(Enter["room"], "$N enters into the " + what + ".");
    if( Enter["post"] ) {
	evaluate(Enter["post"], what);
    }
    return 1;
}

varargs mixed eventLock(object who, mixed arg1, mixed arg2) {
    object key;
    if(arg1 && objectp(arg1)) key = arg1;
    else if(arg2 && objectp(arg2)) key = arg2;
    else return 0;
    return Door->eventLock(who, key);
}

varargs mixed eventOpen(object who, object tool) {
    return Door->eventOpen(who, tool);
}

varargs mixed eventPick(object who, string str, object tool) {
    return Door->eventPick(who, str, tool);
}

mixed eventUnlock(object who, object key) {
    return Door->eventUnlock(who, key);
}

string GetDoor() {
    return Door;
}

void SetDoor(string door) {
    Door = door;
}

varargs void SetEnter(string dest, function pre, function post) {
    if( !dest ) {
	Enter = 0;
	return;
    }
    dest = ResolveObjectName(dest);
    Enter = ([ "room" : dest, "pre" : pre, "post" : post ]);
}

string GetEnter() {
    if( !Enter ) {
	return 0;
    }
    else {
	return Enter["room"];
    }
}

mixed direct_wizlock_obj(){ return 1; }
mixed direct_wizunlock_obj(){ return 1; }