
#ifndef  __JBXL_CPP_TOOLSPP_H_
#define  __JBXL_CPP_TOOLSPP_H_


/**
@brief    ツールライブラリ ヘッダ for C++
@file     tools++.h
@author   Fumi.Iseki (C)
*/


#include "common++.h"
#include "tools.h"





////////////////////////////////////////////////////////////////////////////////////////////
//
// MFC & stderr用 デバック用メッセージ表示マクロ for Windows VC++
//

/**
@file     tools++.h

@par 使用できるデバッグ用関数．
- _DEBUG が定義されない場合コードが削除されるエラーメッセージ関数．
	- DEBUG_INFO()
	- DEBUG_WARN()
	- DEBUG_ERR()     
	- DEBUG_Message()
	- void  DEBUG_MESGLN()
- 常に出力される．
	- void  print_messageln()　　
*/


#ifdef  _DEBUG
#ifndef EBUG
	#define EBUG
#endif
#endif



#ifdef  MAGADBG
	#include "MagaDbg.h"
	static   CMagaDbg  DBG_Red(DBG_RED);
	static   CMagaDbg  DBG_Blue(DBG_BLUE);
	static   CMagaDbg  DBG_Black(DBG_BLACK);
#endif  // MAGADBG




////////////////////////////////////////////////////////////////////
//　コンパイル時設定デバッグ用
//        不要になった場合（EBUGを指定しない場合），コードは削除される

#ifdef  EBUG		// -DEBUG
	// デバッグモード
	#ifdef  WIN32
	#ifdef  MAGADBG
		#define  DEBUG_INFO		DBG_Black.printf
		#define  DEBUG_WARN		DBG_Blue.printf
		#define  DEBUG_ERR		DBG_Red.printf
		#define  DEBUG_MESGLN	DBG_Black.printf
	#endif  // MAGADBG
	#endif  // WIN32

	#ifndef DEBUG_INFO
		#define DEBUG_INFO		jbxl::print_messageln
		#define DEBUG_WARN		jbxl::print_messageln
		#define DEBUG_ERR		jbxl::print_messageln
		#define DEBUG_MESGLN	jbxl::print_messageln
	#endif // DEBUG_INFO

#else  // EBUG
		// Non デバッグモード
	#ifdef WIN32
		#define DEBUG_INFO				jbxl::nop_func
		#define DEBUG_WARN				jbxl::nop_func
		#define DEBUG_ERR				jbxl::nop_func
		#define DEBUG_MESGLN			jbxl::nop_func
	#else
		#define DEBUG_INFO(f, ...)		{}
		#define DEBUG_WARN(f, ...)		{}
		#define DEBUG_ERR(f, ...)		{}
		#define DEBUG_MESGLN(f, ...)	{}
	#endif

#endif	// EBUG







////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//

//#ifndef va_start
//	#include <stdarg.h>
//#endif




//
namespace jbxl {




/**
	汎用の（エラー）メッセージ出力関数，MAGADBG（VC++のMFC用）対応
*/
void  print_messageln(const char* fmt, ...);

#define  print_mesgln  print_messageln





////////////////////////////////////////////////////////////
//
//

inline  char*  GetLocalTime(char deli1=':', char deli2=' ', char deli3=':')		///< not free()
{
	return get_local_time(deli1, deli2, deli3);
}





}		// namespace


#endif
