/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
#pragma save_binary
#include "move_failures.h"
#define DROP 1
#define GET 2
int     move_flag;

varargs int move( mixed dest, mixed messin, mixed messout )
{
    object  prev;

    prev = environment();
    if( !dest )
	return MOVE_EMPTY_DEST;
    if( environment() &&
	    !environment()->test_remove( this_object(), move_flag & DROP ) )
	return MOVE_NO_DROP;
    if( !dest->test_add( this_object(), move_flag & GET ) )
	return MOVE_NO_GET;
    if( environment() )
	event( environment(), "exit", messout, dest );
    move_object( this_object(), dest );
    if( objectp( dest ) )
	event( dest, "enter", messin, prev );
    else
	if( find_object( dest ) )
	    event( find_object( dest ), "enter", messin, prev );
    return MOVE_OK;
}

void    reset_get()
{
    move_flag |= GET;
}
void    set_get()
{
    move_flag &= ~GET;
}
void    reset_drop()
{
    move_flag |= DROP;
}
void    set_drop()
{
    move_flag &= ~DROP;
}

void    dest_me()
{
    if( environment() )
	event( environment(), "dest_me" );
    efun::destruct( this_object() );
}

/* The ultimate dest_me. Do not mask! */
nomask mixed dwep()
{
    efun::destruct( this_object() );
    return "Destruct With Extreme Prejuce";
}

int     drop()
{
    return move_flag & DROP;
}
int     get()
{
    return move_flag & GET;
}

void    set_move_flag( int i )
{
    move_flag = i;
}

mixed  *query_init_data()
{
    return({ "move", move_flag, "set_move_flag/p/" });
}