/
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/
int     valid_snoop( object snooper, object snoopee, object pobj )
{
    if( snooper == snoopee )
    {
	tell_object( snooper, "You can't snoop yourself.\n" );
	return 0;
    }
    if( snoopee && query_snoop( snoopee ) )
    {
	tell_object( snooper,
		     snoopee->query_cap_name() + " is already being snooped.\n" );
	return 0;
    }
    if( snooper->query_snoopee() )
    {
	if( !snooper->query_property( "quiet snoop" ) )
	{
	    event( users(), snooper->query_cap_name() + " stops qsnooping " +
		   snooper->query_snoopee()->query_name(), "snoop" );
	    tell_object( (object)snooper->query_snoopee(),
			 snooper->query_cap_name() + " stops snooping you.\n" );
	}
	else
	{
	    event( users(), snooper->query_cap_name() + " stops snooping " +
		   snooper->query_snoopee()->query_name(), "snoop" );
	    snooper->remove_property( "quiet snoop" );
	}
	snooper->set_snoopee( 0 );
    }
    if( !snoopee )
    {
	return 1;
    }

    if( query_snoop( snoopee ) )
	return 0;
    if( !snooper->query_creator() )
	return 0;
    if( pobj == this_object() )
    {
	event( users(), snooper->query_cap_name() + " starts qsnooping " +
	       snoopee->query_name(), "snoop" );
	return 1;
    }
    if( query_verb() == "qsnoop" && query_lord( geteuid( snooper ) ) &&
	    !high_programmer( geteuid( snoopee ) ) )
    {
	tell_object( snooper, "You are quiet snooping " +
		     snoopee->query_cap_name() + "\n" );
	snooper->add_property( "quiet snoop", 1 );
    }
    else
    {
	tell_object( snoopee, "You are being snooped by " +
		     snooper->query_cap_name() + ".\n" );
    }
    log_file( "SNOOP", ctime( time() ) + " " +
	      (string)snooper->query_cap_name() + " " +
	      query_verb() + "s " + (string)snoopee->query_cap_name() + ".\n" );
    snooper->set_snoopee( snoopee );
    if( query_verb() == "qsnoop" )
    {
	tell_object( snooper, "Please share with us the reason why you are " +
		     "quiet snooping?\n: " );
	input_to( "snoop_reason" );
	snoop_list[ snooper ] = snoopee;
	return 0;
    }
    event( users(), snooper->query_cap_name() + " starts snooping " +
	   snoopee->query_name(), "snoop" );
    return 1;
}				/* valid_snoop() */

void    snoop_reason( string str )
{
    object  snooper;

    snooper = this_player();
    if( this_player( 1 ) != this_player() )
    {
	write( "Can't force people...\n" );
	return;
    }
    if( !high_programmer( geteuid( this_player() ) ) )
    {
	write( "Not a high programmer.\n" );
	return;
    }
    if( !snoop_list[ snooper ] )
    {
	write( "The snoopee has just logged out.\n" );
	return;
    }
    if( !str )
    {
	write( "Snoop canceled.\n" );
	log_file( "SNOOP", "  Chickened out.\n" );
	return;
    }
    log_file( "SNOOP", "  Reason: " + str + "\n" );
    if( snoop( snooper, snoop_list[ snooper ] ) )
	write( "Snoop suceeded,\n" );
    else
	write( "Snoop failed.\n" );
}				/* snoop_reason() */