key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               j###t  ########## ####   ####
**              j###t   ########## ####   ####
**             j###T               "###L J###"
**          ######P'    ##########  #########
**          ######k,    ##########   T######T
**          ####~###L   ####
**          #### q###L  ##########   .#####
**          ####  \###L ##########   #####"
*/

package key.commands;

import key.*;
import java.io.IOException;

import java.util.StringTokenizer;

public class ContextChanger implements Commandable
{
	Commandable c;
	Atom ctxt;
	
	public ContextChanger( Commandable f, Atom context )
	{
		c = f;
		ctxt = context;
	}
	
	/**
	  *  Changes the players context.  The context is *always* specified
	  *  as an offset from the player class - regardless of what your current
	  *  reference is.  This is to stop you getting lost ;)
	 */
	public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
	{
		Atom old = p.getContext();
		p.setContext( ctxt );
		c.run( p, args, fullLine, caller, ic, flags );
		p.setContext( old );
	}
	
	public boolean isDisabled()
	{
		return( c.isDisabled() );
	}
	
	public void disable()
	{
		c.disable();
	}
	
	public void usage( InteractiveConnection ic )
	{
		c.usage( ic );
	}
	
	public void usage( InteractiveConnection ic, CategoryCommand caller )
	{
		c.usage( ic, caller );
	}
	
	public String getWhichId()
	{
		return( c.getWhichId() );
	}
	
	public String getUsage()
	{
		return( c.getUsage() );
	}
	
	public Commandable getMatch( final Player p, key.util.StringTokenizer st )
	{
		return( this );
	}

	public Command.Match getFinalMatch( final Player p, key.util.StringTokenizer st )
	{
		return( new Command.Match()
		{
			{
				match = ContextChanger.this;
			}
			
			public String getErrorString()
			{
				return( "" );
			}
		} );
	}
	
	public boolean recloneArgs()
	{
		return( c.recloneArgs() );
	}
}