
#ifndef  __JBXL_CPP_TOOLSPP_H_
#define  __JBXL_CPP_TOOLSPP_H_


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



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

/**
使用できる関数．

_DEBUG が定義されない場合コードが削除されるエラーメッセージ関数．
	DEBUG_INFO(char* fmt, ...);
	DEBUG_WARN(char* fmt, ...);
	DEBUG_ERR(char* fmt, ...);     
	DEBUG_Message(char* fmt, ...);     

	void  DEBUG_MESGLN(char* fmt, ...);


常に出力される．
	void  print_messageln(char* fmt, ...);　　
*/



#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(char* fmt, ...);

#define  print_mesgln  print_messageln





}		// namespace


#endif
