bool FVSAccessorModule::Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar )
{
	const TCHAR *Str = Cmd;
	if( FParse::Command(&Str,TEXT("OPEN_VS")) )
	{
		// Valid column number?
		const FString Params( Str );
		const FString Space( TEXT(" ") );
		const int32 ColumnIndex = Params.Find( Space, ESearchCase::CaseSensitive, ESearchDir::FromEnd );
		if ( ColumnIndex != INDEX_NONE )
		{
			// Valid line number?
			const int32 ColumnNumber = FCString::Atoi( *Params.RightChop( ColumnIndex+Space.Len() ) );
			const int32 LineIndex = Params.Find( Space, ESearchCase::CaseSensitive, ESearchDir::FromEnd, ColumnIndex );
			if ( LineIndex != INDEX_NONE )
			{
				// Valid source path?
				const int32 LineNumber = FCString::Atoi( *Params.Mid( LineIndex+Space.Len(), ColumnIndex-LineIndex-Space.Len() ) );
				const FString FullPath = Params.LeftChop( Params.Len() - LineIndex );
				if ( FullPath.Len() > 0 )
				{
					OpenVisualStudioFileAtLineInternal( FullPath, LineNumber, ColumnNumber );
				}
			}
		}
		return true;
	}
	return false;
}
bool FVSAccessorModule::OpenVisualStudioFileAtLine(const FString& FullPath, int32 LineNumber, int32 ColumnNumber)
{
	// Automatically fail if there's already an attempt in progress
	if (!IsVSLaunchInProgress())
	{
		return OpenVisualStudioFileAtLineInternal( FullPath, LineNumber, ColumnNumber );
	}
	return false;
}
bool FVisualStudioSourceCodeAccessor::OpenFileAtLine(const FString& FullPath, int32 LineNumber, int32 ColumnNumber)
{
	// column & line numbers are 1-based, so dont allow zero
	if(LineNumber == 0)
	{
		LineNumber++;
	}
	if(ColumnNumber == 0)
{
		ColumnNumber++;
	}

	// Automatically fail if there's already an attempt in progress
	if (!IsVSLaunchInProgress())
	{
		return OpenVisualStudioFileAtLineInternal(FullPath, LineNumber, ColumnNumber);
	}

	return false;
}