/*
* PutsCmd.java
*
* Copyright (c) 1997 Cornell University.
* Copyright (c) 1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
* Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart
*
* RCS @(#) $Id: PutsCmd.java,v 1.6 2002/01/21 06:34:26 mdejong Exp $
*
*/
using System;
using System.IO;
namespace tcl.lang
{
/// This class implements the built-in "puts" command in Tcl.
class PutsCmd : Command
{
/// Prints the given string to a channel. See Tcl user
/// documentation for details.
///
///
/// the current interpreter.
///
/// command arguments.
///
public TCL.CompletionCode cmdProc( Interp interp, TclObject[] argv )
{
Channel chan; // The channel being operated on this method
string channelId; // String containing the key to chanTable
string arg; // Argv[i] converted to a string
int i = 1; // Index to the next arg in argv
bool newline = true;
// Indicates to print a newline in result
if ( ( argv.Length >= 2 ) && ( argv[1].ToString().Equals( "-nonewline" ) ) )
{
newline = false;
i++;
}
if ( ( i < argv.Length - 3 ) || ( i >= argv.Length ) )
{
throw new TclNumArgsException( interp, 1, argv, "?-nonewline? ?channelId? string" );
}
// The code below provides backwards compatibility with an old
// form of the command that is no longer recommended or documented.
if ( i == ( argv.Length - 3 ) )
{
arg = argv[i + 2].ToString();
if ( !arg.Equals( "nonewline" ) )
{
throw new TclException( interp, "bad argument \"" + arg + "\": should be \"nonewline\"" );
}
newline = false;
}
if ( i == ( argv.Length - 1 ) )
{
channelId = "stdout";
}
else
{
channelId = argv[i].ToString();
i++;
}
if ( i != ( argv.Length - 1 ) )
{
throw new TclNumArgsException( interp, 1, argv, "?-nonewline? ?channelId? string" );
}
chan = TclIO.getChannel( interp, channelId );
if ( chan == null )
{
throw new TclException( interp, "can not find channel named \"" + channelId + "\"" );
}
try
{
if ( newline )
{
chan.write( interp, argv[i] );
chan.write( interp, "\n" );
}
else
{
chan.write( interp, argv[i] );
}
}
catch ( IOException e )
{
throw new TclRuntimeError( "PutsCmd.cmdProc() Error: IOException when putting " + chan.ChanName );
}
return TCL.CompletionCode.RETURN;
}
}
}