

#ifndef _dkutilFunction01__
#define _dkutilFunction01__

/**
    @brief		システムクラス
    @author		Noriyuki Lee  http://www.twin-tail.jp/	and d金魚
    @since		2003.07.01
		@note 
		再利用、改造、追記: d金魚<br>
		このソースの元の製作者は再利用改造許可をしています。<br>
		<b>注意:</b>
		<s>USE_DKINGYO_SHELLとUSE_DKINGYO_COMMON_CONTROLを定義していないとこのヘッダは使えません。</s>
		
*/

#include "dkutilBuffer.h"
//#include "dkutilCommonControl.h"
//#include "dkutilShell.h"

enum dkutilKeyState
{
	///< キーはフリー状態
	DKUTIL_KEY_STATE_FREE = 0,
	///< キーは離された瞬間
	DKUTIL_KEY_STATE_PULL,
	///< キーは押された瞬間
	DKUTIL_KEY_STATE_PUSH,
	///< キーは押され続けている
	DKUTIL_KEY_STATE_HOLD,					
};

//#if !defined(USE_DKINGYO_SHELL) && !defined(USE_DKINGYO_COMMON_CONTROL)
//#	error "Please Defined USE_DKINGYO_SHELL and USE_DKINGYO_COMMON_CONTROL!!"
//#endif


namespace dkutil{

	
/*!
@param set[in] 文字列化したいBool値
@param buff[out] 文字列バッファへのポインタ
@param buffsize[in] バッファのサイズ(１０文字もあれば十分かな！？
@return 成功したらtrue
*/
///bool型の変数の中の値を文字列のtrue,falseに変関する
inline bool BooleanToCharArray(bool set,char *buff,size_t buffsize){
	const int size = 6;//NULL文字考慮
	static char true_or_false[][6]={"false","true"};
	if(buffsize < size){	return false;}
	strcpy(buff,true_or_false[set]);
	return true;
}
/*!
	☆壁紙設定:壁紙を設定します。

@param	*pFile[in]		: 壁紙に設定するファイル名
@param	Type[in]		: 0 中央に表示 / 1 並べて表示 / 2 画面サイズに合わせて拡大表示
@param	IsReboot[in]	: 再起動後に有効にする場合 true
@return bool			: 成功 true / 失敗 false
*/

extern bool SetWallPaper( char *pFile, long Type, bool IsReboot );
/*!
☆他のアプリケーションを起動
@param	*pDir[in]		: ディレクトリ名
@param	*pAppName[in]: アプリケーション名
@return 成功 true / 失敗 false
*/
extern bool RunApplication( char *pDir, char *pAppName );
/*!
☆ブラウザ起動:<br>
	ブラウザ起動を起動し任意のURLのサイトを開きます。<br>
	フォルダのパスを与えるとフォルダを開くこともできます。<br>

@param	*pURL[in]		: 開くURL
@param false/失敗 true/成功
*/
extern bool OpenBrowser( char *pURL );
/*
☆ウィンドウズディレクトリ取得:ウィンドウズのディレクトリを取得します。
@param	*Dir[in] 	ウィンドウズのディレクトリパス格納先
廃止。GetWindowsDirectoryの方が脆弱性がない
*/
//extern void GetWindowsDir( char *pDir );


/*
☆ファイル削除：ファイルを削除します。<br>
（ぶっちゃけremoveのらっぱ
@param	*pSrc[in]	: 削除元 / 削除するファイルへのパス
2003/10/20 廃止 Win32APIにこれと同じものがあった･･･
*/
//extern void DeleteFile( char *pSrc );

//dGetFileSizeの方が優秀なので･･･
//extern unsigned long GetFileSize( char *pSrc );


/*
☆フォルダ選択ダイアログ:フォルダ選択ダイアログをだします。
@param	*pDir[in]		: ディレクトリ格納先
@return	: 成功 true / 失敗 false
//脆弱性があるので廃止。
*/
//extern bool FolderSelect( char *pDir ,HWND WindowHandle);

/*
☆IME表示設定IME表示の設定をします。
	@param	 flag[in]		: 使用するならtrue
	2003/11/15:IMEが落ちる可能性があるので廃止
*/
//extern void SetShowIME( bool flag );



/*!
☆メモリサイズ取得物理メモリのサイズを取得します。
	@return	 *pTotalMem[out]	: 合計メモリ容量を格納するポインタ
	@return	 *pFreeMem[out]		: 空きメモリ容量を格納するポインタ
*/
extern void GetMemorySize( unsigned long *pTotalMem, unsigned long *pFreeMem );

/*!☆カラー選択ダイアログカラー選択ダイアログを開き色の取得をします。
@param	 *pR[out]	: 赤色格納先アドレス
@param	 *pG[out]	: 緑色格納先アドレス
@param	 *pB[out]	: 青色格納先アドレス
@param WindowHandle[in] Windowのハンドル。（無い場合はNULLでOK
@param 成功 true / 失敗 false
*/
extern bool OpenColorDialog( long *pR, long *pG, long *pB ,HWND WindowHandle);

/*!
☆ローカル時間取得現在地の時間を取得します。
@param	 *pYear[out]			: 西暦を受け取る変数のアドレス
@param	 *pMonth[out]		: 月を受け取る変数のアドレス
@param	 *pWeekDay[out]		: 曜日を受け取る変数のアドレス
@param	 *pDay[out]			: 日を受け取る変数のアドレス
@param	 *pHour[out]			: 時を受け取る変数のアドレス
@param	 *pMinute[out]		: 分を受け取る変数のアドレス
@param	*pSecond[out]		: 秒を受け取る変数のアドレス
@param	*pMilliSecond[out]	: ミリ秒を受け取る変数のアドレス
@return		: 成功 true / 失敗 false
*/

extern void GetLocalTime( long *pYear, long *pMonth, long *pWeekDay, long *pDay, long *pHour, long *pMinute, long *pSecond, long *pMilliSecond );

/*!☆１ヶ月の日数を取得１ヶ月の日数を取得します。
@param	year[in] 年
@param	month[in] 月
@return	１ヶ月の日数
*/
extern long DayOfMonth( long year, long month );

/*!☆月始めの曜日取得:月始めの曜日を取得します。
@param		year	: 年
@param		month	: 月
@return			: 月初めの曜日
*/
extern long DayOfWeek( long year, long month );
/*!文字コード取得:与えられた文字の文字コードを取得します
@param		pKey[out]			: キーデータ格納先 dkutilKeyState型です。
@param		KeyNo[in]		: 調べるキー番号

*/
extern void KeyCheck( dkutilKeyState *pKey, unsigned long KeyNo );
/*!
エンディアンをチェンジします。ビックエンディアンとリトルエンディアンね。<br>
詳しくはGoogleで調べるのが一番速い.<br>
@param pData[in] チェンジするデータ
@param Bytes[in] pDataのサイズ
*/
extern void ChangeEndian( void *pData, unsigned long Bytes );
	///テストする関数。
	extern void TestLunaSystem();
};

#endif//end of include once