public override ReturnCode Execute( Interpreter interpreter, IClientData clientData, ArgumentList arguments, ref Result result ) { ReturnCode code = ReturnCode.Ok; if (interpreter != null) { if (arguments != null) { if (arguments.Count >= 2) { string varName = arguments[1]; if (arguments.Count == 2) { // // NOTE: *SPECIAL CASE* For compatibility with Tcl, we must generate // an error if only two arguments are supplied and the variable // does not exist. // code = interpreter.GetVariableValue( VariableFlags.DirectGetValueMask, varName, ref result, ref result); } else { lock (interpreter.SyncRoot) /* TRANSACTIONAL */ { StringBuilder builder; if (interpreter.GetVariableValue( VariableFlags.DirectGetValueMask, varName, ref result) == ReturnCode.Ok) { builder = StringOps.GetStringBuilderFromObject(result); } else { builder = StringOps.NewStringBuilder(); } for (int argumentIndex = 2; argumentIndex < arguments.Count; argumentIndex++) { builder.Append(arguments[argumentIndex]); } code = interpreter.SetVariableValue2( VariableFlags.DirectSetValueMask, varName, builder, (TraceList)null, ref result); if (code == ReturnCode.Ok) { result = builder; } } } } else { result = "wrong # args: should be \"append varName ?value ...?\""; code = ReturnCode.Error; } } else { result = "invalid argument list"; code = ReturnCode.Error; } } else { result = "invalid interpreter"; code = ReturnCode.Error; } return(code); }