/*	
 *	cliplogb.h
 *
 *	ログバッファ
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2013 Naoyuki Sawa
 *
 *	* Mon Dec 16 17:34:52 JST 2013 Naoyuki Sawa
 *	- 1st リリース。
 */
#ifndef __CLIP_LOGB_H__
#define __CLIP_LOGB_H__

/****************************************************************************
 *	定数、構造体
 ****************************************************************************/

/* ログバッファ構造体 */
typedef struct _ST_LogBuf {
	short LineMax;	/* 最大行(=行数-1) */
	short LinePos;	/* 行位置(0〜LineMax) */
	char* LineMem[0/*LineMax+1*/];	/* 行バッファ(未格納の行はNULL) */
} ST_LogBuf;

/****************************************************************************
 *	アプリケーション用関数
 ****************************************************************************/

/* ログバッファを作成します。
 * [in]
 *	LineNum		ログバッファの行数。(1以上)
 * [out]
 *	戻り値		ST_LogBuf構造体。
 */
ST_LogBuf* LogBuf_Init(int LineNum);

/* ログバッファを削除します。
 * [in]
 *	Me		ST_LogBuf構造体。
 */
void LogBuf_Free(ST_LogBuf* Me);

/* ログバッファのログ文字列をクリアします。
 * [in]
 *	Me		ST_LogBuf構造体。
 */
void LogBuf_Clear(ST_LogBuf* Me);

/* ログバッファにログ文字列を追加します。
 * [in]
 *	Me		ST_LogBuf構造体。
 *	Str		ログ文字列。
 */
void LogBuf_Print(ST_LogBuf* Me, const char* Str);

/* ログバッファにログ文字列を追加します。
 * [in]
 *	Me		ST_LogBuf構造体。
 *	Fmt		書式付き文字列。
 * [note]
 *	- 文字列展開バッファとして_def_vbuff[]を利用しています。
 */
void LogBuf_Printf(ST_LogBuf* Me, const char* Fmt, ...);

/* ログバッファを描画します。
 * [in]
 *	Me		ST_LogBuf構造体。
 *	r		RENDER構造体。
 *	x,y		描画位置。
 *	c		文字色。
 * [note]
 *	- 文字列描画関数としてrender_reduced_string()を利用しています。
 *	  従って16階調表示モードには対応していません。
 */
void LogBuf_Draw(ST_LogBuf* Me, RENDER* r, int x, int y, int c);

/****************************************************************************
 *	使用例
 ****************************************************************************/

//	ST_LogBuf* pLogBuf;
//	
//	void app_init() {
//	  …
//	  pLogBuf = LogBuf_Init(9); //⇒ﾛｸﾞﾊﾞｯﾌｧを作成する｡行数は､画面一杯とする｡(10ﾋﾟｸｾﾙ×9行=90ﾋﾟｸｾﾙ)
//	  …
//	}
//	
//	void app_exit() {
//	  …
//	  LogBuf_Free(pLogBuf); //⇒ﾛｸﾞﾊﾞｯﾌｧを削除する｡
//	  …
//	}
//	
//	void app_main() {
//	  for(;;) {
//	    schedule();
//	    surface_clear(&surface, 0);
//	    if(joy & TRG_A) { LogBuf_Printf(pLogBuf, "乱数値 = %u", RND32(seed)); } //⇒Aﾎﾞﾀﾝが押されたらﾛｸﾞﾊﾞｯﾌｧにﾛｸﾞ文字列を追加する｡(日本語ok)
//	    if(joy & TRG_B) { LogBuf_Clear(pLogBuf); } //⇒Bﾎﾞﾀﾝが押されたらﾛｸﾞﾊﾞｯﾌｧのﾛｸﾞ文字列をｸﾘｱする｡
//	    LogBuf_Draw(pLogBuf, &render, 0, //⇒ﾛｸﾞﾊﾞｯﾌｧを描画する｡
//	      (pLogBuf->LineMem[pLogBuf->LineMax] ? -2 : 0), 3); //⇒90ﾋﾟｸｾﾙ有る場合は最終行がはみ出すよりも先頭行がはみ出すようにする工夫｡(必須ではない)
//	  }
//	}

#endif /*__CLIP_LOGB_H__*/
