/
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/
#define COL "%^CYAN%^"
#define SAVEFILE "/save/checkout"

mapping files;

int     query_owners_files( string str )
{
    mixed   entry;

    if( !str )
	str = (string)this_player()->query_cap_name();
    else
	str = capitalize( str );
    write( COL + "Files checked out by " + str + " :- \n" );

    while( (entry = each( files )) != ({ }) )
	if( entry[ 1 ] == str )
	    if( "/secure/master"->valid_read( entry[ 0 ], this_player() ) )
		write( "    " + entry[ 0 ] + "\n" );
    write( "%^RESET%^\n" );
    return 1;
}

int     check_file_out( string str )
{
    string  name;

    if( !str )
    {
	write( COL + "Useage : " + query_verb() + " <filename>%^RESET%^\n" );
	return 1;
    }
    if( file_size( str ) < 0 )
	str = (string)this_player()->query_current_path() + "/" + str;
    if( file_size( str ) < 0 )
    {
	write( COL + "File not found.%^RESET%^\n" );
	return 1;
    }
    if( !files )
	files = ([ ]);
    if( files[ str ] )
    {
	write( COL + str + " is currently checked out by "
	       + files[ str ] + ".%^RESET%^\n" );
	return 1;
    }
    name = (string)this_player()->query_cap_name();
  files += ([ str:name ]);
    write( COL + "File " + str + " checked out under your name.%^RESET%^\n" );
    log_file( "CHECKOUT",
	      name + " checked out " + str + " at " + ctime( time() ) + "\n" );
    return 1;
}

int     return_file( string str )
{
    string  name;

    if( !str )
    {
	write( COL + "Useage : " + query_verb() + " <filename>%^RESET%^\n" );
	return 1;
    }
    if( file_size( str ) < 0 )
	str = (string)this_player()->query_current_path() + "/" + str;
    if( file_size( str ) < 0 )
    {
	write( COL + "File not found.%^RESET%^\n" );
	return 1;
    }
    if( !files )
	files = ([ ]);
    if( !files[ str ] )
    {
	write( COL + str + " is not checked out.%^RESET%^\n" );
	return 1;
    }

    name = (string)this_player()->query_cap_name();

    if( files[ str ] != name )
    {
	write( COL + str + " is checked out by "
	       + files[ str ] + ", not you!%^RESET%^\n" );
	return 1;
    }
    files = m_delete( files, str );
    write( COL + "File " + str + " returned.%^RESET%^\n" );
    log_file( "CHECKOUT",
	      name + " returned " + str + " at "
	      + ctime( time() ) + "\n" );
    return 1;
}

int     whois_owner( string str )
{
    string  name;

    if( !str )
    {
	write( COL + "Useage : " + query_verb() + " <filename>%^RESET%^\n" );
	return 1;
    }
    if( file_size( str ) < 0 )
	str = (string)this_player()->query_current_path() + "/" + str;
    if( file_size( str ) < 0 )
    {
	write( COL + "File not found.%^RESET%^\n" );
	return 1;
    }
    if( !files )
	files = ([ ]);
    if( !files[ str ] )
    {
	write( COL + str + " is not checked out.%^RESET%^\n" );
	return 1;
    }
    write( COL + "File " + str + " is checked out by " + files[ str ] + ".%^RESET%^\n" );
    return 1;
}

string  query_file_owner( string str )
{
    if( !files )
	files = ([ ]);;
    if( files[ str ] )
	return files[ str ];
    return "";
}

create()
{
    string  old;

    old = geteuid();
    seteuid( "Room" );
    restore_object( SAVEFILE, 1 );
    seteuid( old );
}

dest_me()
{
    string  old;

    old = geteuid();
    seteuid( "Room" );
    save_object( SAVEFILE, 1 );
    seteuid( old );
    destruct( this_object() );
}