'dos_console.sbp
'このファイルには、コンソール アプリケーション用のサポート プログラムが記載されます。


#ifndef _INC_DOS_CONSOLE
#define _INC_DOS_CONSOLE

System.Console.OpenStandardError()
System.Console.OpenStandardInput()
System.Console.OpenStandardOutput()

'---------- command.sbp内で定義済み ----------
'Dim _System_InputDataPtr[_System_MAX_PARMSNUM] As VoidPtr
'Dim _System_InputDataType[_System_MAX_PARMSNUM] As DWord
'---------------------------------------------
Sub INPUT_FromPrompt(ShowStr As String)
*InputReStart '多重Continueがあるので、これはループ構文に直せない。
	PRINT_ToPrompt(ShowStr)

	'入力
	Dim input = System.Console.ReadLine()
	If ActiveBasic.IsNothing(input) Then
		Exit Sub
	End If

	If input.Length = 0 Then Goto *InputReStart

	'データを変数に格納
	Const comma = &h2c As Char 'Asc(",")
	Dim broken = ActiveBasic.Strings.Detail.Split(input, comma)
	Dim i As Long
	For i = 0 To ELM(broken.Count)
		If _System_InputDataPtr[i] = 0 Then
			PRINT_ToPrompt(Ex"入力データの個数が多すぎます\r\n")
			 Goto *InputReStart
		End If
		_System_Input_SetArgument(_System_InputDataPtr[i], _System_InputDataType[i], broken.Item(i))
	Next

	If _System_InputDataPtr[i]<>0 Then
		PRINT_ToPrompt(Ex"入力データの個数が足りません\r\n")
		 Goto *InputReStart
	End If
End Sub

/*
@brief コンソール出力の内容を削除
@date 2008/9/18
@auther NoWest
*/
Macro CLS()(num As Long)
	Select Case num
		Case 2
			Exit Macro
		Case Else
			System.Console.Clear()
	End Select
End Macro

/*
@brief コンソール出力の前景色・背景色を変更
@date 2008/9/18
@auther NoWest
*/
Macro COLOR(TextColorCode As Long)(BackColorCode=-1 As Long)
	Select Case TextColorCode
		Case 1
			System.Console.ForegroundColor = System.ConsoleColor.Blue
		Case 2
			System.Console.ForegroundColor = System.ConsoleColor.Red
		Case 3
			System.Console.ForegroundColor = System.ConsoleColor.Magenta
		Case 4
			System.Console.ForegroundColor = System.ConsoleColor.Green
		Case 5
			System.Console.ForegroundColor = System.ConsoleColor.Cyan
		Case 6
			System.Console.ForegroundColor = System.ConsoleColor.Yellow
		Case 7
			System.Console.ForegroundColor = System.ConsoleColor.Gray
		Case Else
			System.Console.ForegroundColor = System.ConsoleColor.Black
	End Select

	Select Case BackColorCode
		Case -1
			Exit Macro
		Case 1
			System.Console.BackgroundColor = System.ConsoleColor.Blue
		Case 2
			System.Console.BackgroundColor = System.ConsoleColor.Red
		Case 3
			System.Console.BackgroundColor = System.ConsoleColor.Magenta
		Case 4
			System.Console.BackgroundColor = System.ConsoleColor.Green
		Case 5
			System.Console.BackgroundColor = System.ConsoleColor.Cyan
		Case 6
			System.Console.BackgroundColor = System.ConsoleColor.Yellow
		Case 7
			System.Console.BackgroundColor = System.ConsoleColor.Gray
		Case Else
			System.Console.BackgroundColor = System.ConsoleColor.Black
	End Select
End Macro

/*
@brief コンソール出力のカーソル位置を変更
@date 2008/9/18
@auther NoWest
*/
Macro LOCATE(x As Long, y As Long)
	System.Console.SetCursorPosition(x,y)
End Macro

Sub PRINT_ToPrompt(buf As String)
	If String.IsNullOrEmpty(buf) Then
		Exit Sub
	End If

	System.Console.Write(buf)
End Sub
/* TODO: _System_GetUsingFormatを用意して実装する
Sub PRINTUSING_ToPrompt(UsingStr As String)
	PRINT_ToPrompt(_System_GetUsingFormat(UsingStr))
End Sub
*/

#endif '_INC_DOS_CONSOLE
