'Classes/System/Console.ab

Namespace System

/*
@brief コンソール入出力・ウィンドウなどのクラス
@date 2008/02/26
@auther Egtra
*/
Class Console
Public
	/*
	@brief 標準入力を設定する
	@date 2008/02/26
	@auther Egtra
	*/
	Static Sub SetIn(newIn As IO.TextReader)
		If ActiveBasic.IsNothing(newIn) Then
			Throw New ArgumentNullException("newIn")
		End If
		in = newIn
	End Sub
	/*
	@brief 標準入力を取得する
	@date 2008/02/26
	@auther Egtra
	*/
	Static Function In() As IO.TextReader
		In = in
	End Function

	/*
	@brief 標準入力から1行読み込む
	@date 2008/02/26
	@auther Egtra
	*/
	Static Function ReadLine() As String
		Dim lock = enter()
		Try
			ReadLine = in.ReadLine()
		Finally
			lock.Leave()
		End Try
	End Function

	/*
	@brief 標準入力から1行読み込む
	@date 2008/02/26
	@auther Egtra
	*/
	Static Function Read() As Long
		Dim lock = enter()
		Try
			Read = in.Read()
		Finally
			lock.Leave()
		End Try
	End Function
Private
	Function enter() As ActiveBasic.Windows.CriticalSectionLock
		Imports ActiveBasic.Windows
		If ActiveBasic.IsNothing(cs) Then
			Dim lock = New CriticalSectionLock(_System_CriticalSection)
			Try
				If ActiveBasic.IsNothing(cs) Then
					cs = New CriticalSection
				End If
			Finally
				lock.Dispose()
			End Try
		End If
		enter = cs.Enter
	End Function

	Static in = Nothing As IO.TextReader
	Static cs = Nothing As ActiveBasic.Windows.CriticalSection
End Class

End Namespace 'System
