//////////////////////////////////////////
// User.h
// Copyright (c) 08/30/2022 by Ysama
//////////////////////////////////////////
////////////
//定数の定義
////////////
#define UP				FALSE
#define DOWN 			TRUE
#define NO_OF_SUBITEM	3

//////////////////
//コモンダイアログ
//////////////////
CMNDLG g_Cmndlg;

//////////////////
//拡張子チェック
//////////////////
CEXTCHK g_ExtChk;

///////////////
//ファイルパス
///////////////
WCHAR* g_Path;		//ファイルリストフォールダーへのパス
WCHAR* g_Ext;		//ファイルリストファイルの拡張子

////////////////////
//ファイルフィルター
////////////////////
WCHAR* g_LFlt;		//リストファイルフィルターへのポインター
WCHAR* g_MFlt;		//メディアファイルフィルターへのポインター

////////////////////////
//ファイルリストファイル
////////////////////////
CSTR g_File;

//////////////////////
//データ処理用CSTR変数
//////////////////////
CSTR g_Data;

////////////////////////////////
//ポップアップメニュ−のハンドル
////////////////////////////////
HMENU g_hPopup;

/////////////
//D&D用フラグ
/////////////
bool g_ByFile = FALSE;

//////////////////////////
//サブアイテムのソート関連
//////////////////////////
//列とソート方法の配列
bool sortsubno[NO_OF_SUBITEM] = {FALSE};
//ソートコールバック関数
int CALLBACK CompProc(LPARAM lp1, LPARAM lp2, LPARAM lpSort) {

	static int nItem1, nItem2;
	static WCHAR buf1[MAX_PATH], buf2[MAX_PATH];
	//アイテムの検索
	nItem1 = FileList.m_ListView.FindItem(-1, NULL, lp1);
	nItem2 = FileList.m_ListView.FindItem(-1, NULL, lp2);
	//アイテム情報の取得
	FileList.m_ListView.GetItemText(nItem1, (int)lpSort, buf1, MAX_PATH);
	FileList.m_ListView.GetItemText(nItem2, (int)lpSort, buf2, MAX_PATH);
	if(sortsubno[(bool)lpSort])
		return(lstrcmpW(buf1, buf2));
	else
		return(lstrcmpW(buf1, buf2) * -1);
}

////////////////////////////
//カンマ区切り文字切り出し
//★str 文字列は切り出した文
//字列だけ短縮されるので注意
////////////////////////////
WCHAR* GetDelimtStr(WCHAR* str) {

	static WCHAR buff[MAX_PATH * 4];	//取り敢えず1K bytes確保
	WCHAR* cp = str;
	int len = 0;
	switch(*cp) {
	case 0:
		return NULL;			//NULL終端を指していれば終了
	case L'\"':					//「""」で括られた文字列の処理
		cp++;					//'\"'の次に進める
		while(*cp && *cp != L'\"') {
			buff[len] = *cp; 	//strデータをbuffにコピーしてゆく
			cp++;
			len++;
		}
		if(*cp) {				//*cpは'\"'
			cp++;				//cpを'\"'の次へ進める
			buff[len] = L'\0';	//buffのNULL終端処理
		}
		//else−'\"'が閉じられていなければcpの指すNull迄の文字列を返す
		break;
	default:					//「""」で括られていない場合
		//Nullでも','でも'\n'でもなければ
		while(*cp && *cp != L',' && *cp != L'\n') {
			buff[len] = *cp;	//strデータをbuffにコピーしてゆく
			cp++;
			len++;
		}
		buff[len] = L'\0';		//buffのNULL終端処理
		break;
	}
	if(*cp){					//NULL終端でなければ（未だ文字列があれば）
		cp++;					//','や'\n'を指しているので一つ進め
		lstrcpyW(str, cp);		//残余の文字列をstr文字列の先頭に移動
	}
	else						//NULL終端であれば
		*str = L'\0';			//strをから文字列にする
	return buff;				//切り取った文字列を返す（TRUE）
}
