gurba-0.40/
gurba-0.40/bin/
gurba-0.40/lib/
gurba-0.40/lib/cmds/guild/fighter/
gurba-0.40/lib/cmds/monster/
gurba-0.40/lib/cmds/race/catfolk/
gurba-0.40/lib/cmds/race/dwarf/
gurba-0.40/lib/cmds/verb/
gurba-0.40/lib/daemons/data/
gurba-0.40/lib/data/boards/
gurba-0.40/lib/data/messages/
gurba-0.40/lib/data/players/
gurba-0.40/lib/design/
gurba-0.40/lib/domains/gurba/
gurba-0.40/lib/domains/gurba/guilds/fighter/
gurba-0.40/lib/domains/gurba/monsters/
gurba-0.40/lib/domains/gurba/objects/armor/
gurba-0.40/lib/domains/gurba/objects/clothing/
gurba-0.40/lib/domains/gurba/objects/weapons/
gurba-0.40/lib/domains/gurba/vendors/
gurba-0.40/lib/kernel/cmds/admin/
gurba-0.40/lib/kernel/daemons/
gurba-0.40/lib/kernel/include/
gurba-0.40/lib/kernel/lib/
gurba-0.40/lib/kernel/net/
gurba-0.40/lib/kernel/sys/
gurba-0.40/lib/logs/
gurba-0.40/lib/pub/
gurba-0.40/lib/std/modules/languages/
gurba-0.40/lib/std/races/
gurba-0.40/lib/std/races/monsters/
gurba-0.40/lib/wiz/fudge/
gurba-0.40/lib/wiz/spud/
gurba-0.40/src/host/beos/
gurba-0.40/src/host/pc/res/
gurba-0.40/src/kfun/
gurba-0.40/src/lpc/
gurba-0.40/src/parser/
gurba-0.40/tmp/
object *storage;
int storage_size;

int is_storage( void ) {
  return( 1 );
}

void set_storage_size( int size ) {
  storage_size = size;
}

object find_stored_object( string name ) {
  int i,j;
  string *ids;
  for( i = 0; i < sizeof( storage ); i ++ ) {
    ids = storage[i]->query_ids();
    if( ids != 0 ) {
      for( j = 0; j < sizeof( ids ); j ++ ) {
	if( lowercase( ids[j] ) == lowercase( name ) )
	  return( storage[i] );
      }
    }
  }
  return( 0 );
}

void store_object( object ob ) {
  if( storage == 0 )
    storage = ({ });

  if( sizeof( storage ) >= storage_size ) {
    this_player()->write( "The storage is full.\n" );
    return;
  }

  storage += ({ ob });

  if( ob->is_worn() ) {
    this_player()->do_remove( ob );
    this_player()->targetted_action( ob->query_remove_message(), 0, ob );
  }
  
  if( ob->is_wielded() ) {
    this_player()->do_unwield( ob );
    this_player()->targetted_action( ob->query_unwield_message(), 0, ob );
  }
  
  if( ob->is_gettable() ) {
    ob->set_environment( 0 );
    if( this_player()->remove_object( ob ) ) {
      this_player()->targetted_action( "$N $vstore $o.", 0, ob );
    } else {
      this_player()->targetted_action( "$N $vtry to store $o, but $vfail.", 0, ob ); 
    }
  } else {
    this_player()->targetted_action( "$N $vare unable to store $o.", 0, ob ); 
  }
}

void borrow_object( string name ) {
  object ob;

  ob = find_stored_object( name );
  if( ob == 0 ) {
    this_player()->write( "You can't seem to find the " + lowercase(name) + ".\n" );
    return;
  }

  storage -= ({ ob });
  if( ob->is_gettable() ) {
    ob->set_environment( 0 );
    if( ob->move( this_player() ) ) {
      this_player()->targetted_action( "$N $vborrow $o.", 0, ob );
    } else {
      this_player()->targetted_action( "$N $vtry to borrow $o, but $vfail.", 0, ob ); 
    }
  } else {
    this_player()->targetted_action( "$N $vare unable to borrow $o.", 0, ob ); 
  }
}

string query_stored_list( void ) {
  string msg;
  int i;

  if( storage == 0 )
    storage = ({ });

  if( sizeof( storage ) == 0 ) {
    return( " \nThe storage is empty.\n" );
  } else {
    msg = " \nThe storage contains the following:\n";
    for( i = 0; i < sizeof( storage ); i++ ) {
      msg += "  " + storage[i]->query_id() + "\n";
    }
    msg += "\n";
    return( msg );
  }
}