

#include  "tools++.h"


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


using namespace jbxl;



/////////////////////////////////////////////////////////////////////////////////////////////
//
// MAGADBG 対応 デバック用メッセージ表示関数 for Windows VC++
//

/**
@file     tools++.cpp

@attention
32bit版 のデバッグモードでは @b MagaDebug32 を使用しています．@n
http://s-gikan2.maizuru-ct.ac.jp/old/magadbg.html

@par MAGADBG 使用時の相違．
MAGADBG（VC++のMFC用）の場合は必ず改行が入る．@n
MAGADBGを使用しない場合（標準エラー出力の場合）でも改行が入るように調整してある．

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



/**
void  jbxl::print_messageln(const char* fmt, ...)

汎用のメッセージ出力関数，MAGADBG（VC++のMFC用）対応
*/
void  jbxl::print_messageln(const char* fmt, ...)
{
#ifndef  MAGADBG
	char* nfmt;
	int   len;
#else 
	char  buf[LMESG];
	int   n;
#endif

	va_list args;
	va_start(args, fmt);

#ifndef  MAGADBG	// for Linux/Unix
	len  = (int)strlen(fmt) + 2;		// +1
	nfmt = (char*)malloc(len);
	if (nfmt==NULL) return;
	strncpy(nfmt, fmt, len-2);			// -1
	nfmt[len-2] = 0x0a;					// LF
	nfmt[len-1] = '\0';

	vfprintf(stderr, nfmt, args); 
	fflush(stderr);
	free(nfmt);
#else
	n = vsnprintf(buf, LMESG-1, fmt, args);
	DBG_Black.printf(buf);
#endif

	va_end(args);

	return;
}



