/***************************************************************/
//
//
//		DirectX	[ debugconsole.cpp ]
//
//											Author	kazuki tanaka
//											Date	2017 1/6
/*---------------------------------------------------------------
■Update : 2017/1/6
			Create : debugconsole.cpp

/*---------------------------------------------------------------
	インクルードファイル
---------------------------------------------------------------*/

#include <Windows.h>
#include <stdio.h>

#include "d_console.h"

//#pragma comment (lib,"d3d9.lib")
//#pragma comment (lib,"d3dx9.lib")
//#pragma comment (lib,"dxguid.lib")

/*---------------------------------------------------------------
	マクロ定義
---------------------------------------------------------------*/

/*----------------------------------------------------------------
	スタティックメンバ変数の初期化
----------------------------------------------------------------*/

HANDLE Console::m_hConsole = nullptr;


// コンストラクタ
Console::Console()
{

	// Do Nothing!

}

// デストラクタ
Console::~Console()
{

	// Do Nothing!

}

// コンソール開く
void Console::OpenConsole( void )
{

	// コンソールの初期化
	if( !AllocConsole( )){
		return;
	}
	
	// コンソールハンドルの取得
	m_hConsole = GetStdHandle( STD_OUTPUT_HANDLE );

	{ // DebugConsole VersionInfo

		DebugLog( " DebugConsole 1.01(v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32) \n" );
		DebugLog( " Copyright 2016 01/06 kazuki tanaka. All Rights Reserved. \n" );
		DebugLog( " DebugConsole : output show status \n" );
		DebugLog( " & output DebugInfo \n" );
		DebugLog( " How to use : Call : static Member Function -> DebugLog( ... ) \n" );
		DebugLog( " DebugLog is Using like printf \n" );
		DebugLog( " -- Start DebugConsole -- \n\n\n > " );

	} // -> END

}

// コンソール閉じる
void Console::CloseConsole( void )
{

	// コンソール解放
	FreeConsole( );

	// ハンドル開放処理
	//if( m_hConsole != INVALID_HANDLE_VALUE ){
	// ::CloseHandle( m_hConsole );
	//}

}

// デバッグ情報の書き出し
bool Console::DebugLog( char* fmt, ... )
{

	va_list ap;
	char buf[ 256 ];
	bool flag = false;
	DWORD word;

	// エラーチェック
	if( m_hConsole == NULL ){
	
		return false;
	}

	va_start( ap, fmt );
	vsprintf( buf, fmt, ap );
	va_end( ap );
	
	bool result = (bool)WriteConsole( m_hConsole, buf, strlen( buf ), &word, NULL );
	
	return result;

}


