
#pragma		once

#include	"Error.h"

//-- シンボル宣言 ------------------------------------------------------------------------
//----------------------------------------------------------------------------------------

#define ID_TOOLBAR 10000
#define ID_LISTVIEW1 10001
#define ID_STATUS 10002
#define ID_TIMER 10003

#define ID_LISTVIEW2 10100
#define ID_DB_BUTTON1 10101
#define ID_DB_BUTTON2 10102
#define ID_DB_BUTTON3 10103
#define ID_DB_BUTTON4 10104

#define	SBL_STR_INI_EXTRACTDATA							_T("ExtractData.ini")
#define	SBL_STR_INI_SUSIE								_T("Susie.ini")

typedef unsigned __int64 QWORD;
typedef QWORD* LPQWORD;

//-- ストラクチャ宣言 --------------------------------------------------------------------
//----------------------------------------------------------------------------------------

// オプション項目

struct	SOption
{
	// リストビュー関連

	COLORREF			ListBkColor;					// リストの背景色
	TCHAR				szListBkColor[7];				// リストの背景色
	COLORREF			ListTextColor;					// リストの文字色
	TCHAR				szListTextColor[7];				// リストの文字色

	// 検索ファイル関連

	std::vector<BOOL>	bSearch;						// 検索するファイルの種類
	BOOL				bHighSearchOgg;					// OGGの検索精度を上げる

	// 抽出関連

	BOOL				bCreateFolder;					// フォルダごと抽出する
	BOOL				bFixOgg;						// OGG抽出時にCRCを修正
	BOOL				bEasyDecrypt;					// 簡易復号機能を有効にする
	BOOL				bRenameScriptExt;				// スクリプトの拡張子を変更する
	DWORD				BufSize;						// バッファサイズ

	// 画像関連

	BOOL				bDstBMP;						// BMPで出力
	BOOL				bDstPNG;						// PNGで出力
	DWORD				CmplvPng;						// PNG圧縮レベル
	BOOL				bAlphaBlend;					// 出力画像にα値を含まない
	BOOL				bFastAlphaBlend;				// αブレンド処理を高速化する
	DWORD				BgRGB;							// 背景色
	TCHAR				szBgRGB[7];						// 背景色

	// 出力先関連

	YCString			TmpDir;							// テンポラリフォルダ
	BOOL				bSaveSel;						// 出力先を毎回指定する
	BOOL				bSaveSrc;						// 出力先を入力先と同じにする
	BOOL				bSaveDir;						// 出力先を固定する
	YCString			SaveDir;						// 固定出力フォルダ

	// Susie Plug-in関連

	BOOL				bSusieUse;						// Susieプラグインを使用する
	YCString			SusieDir;						// Susieプラグインフォルダ
	BOOL				bSusieFirst;					// Susieプラグインを優先する

	// データベース関連

	BOOL				bUseDB;							// データベース機能を使う
};

// ファイル情報

struct	SFileInfo
{
	YCString			name;							// ファイル名
	DWORD				sizeOrg;						// ファイルサイズ
	DWORD				dwSizeOrg2;						// ファイルサイズ2
	YCString			sSizeOrg;						// カンマ付きファイルサイズ
	DWORD				sizeCmp;						// 圧縮ファイルサイズ
	YCString			sSizeCmp;						// カンマ付き圧縮ファイルサイズ
	YCString			format;							// ファイルフォーマット
	YCString			arcName;						// 読み込むアーカイブファイル
	QWORD				start;							// 開始アドレス
	QWORD				end;							// 終了アドレス
	DWORD				arcID;							// ファイルを複数開いたとき、どのファイルか区別する
	DWORD				arcsID;							// 分割書庫ファイルID
	std::vector<DWORD>	sizesOrg;						// ファイルサイズ(データが散らばっているときに使用)
	std::vector<DWORD>	sizesCmp;						// 圧縮ファイルサイズ(データが散らばっているときに使用)
	std::vector<DWORD>	starts;							// 開始アドレス(データが散らばっているときに使用)
	std::vector<DWORD>	bCmps;							// 圧縮されてるかどうか(データが散らばっているときに使用)
	YCString			title;							// ゲームタイトル
	DWORD				key;							// ファイル固有値
	DWORD				type;							// ファイルタイプ
	std::set<YCString>	sTmpFilePath;					// 抽出したファイルのパス

	SFileInfo()
	{
		key = 0;
	}
};

// データベース情報

struct	FILEINFODB
{
	DWORD				start;
	YCString			path;
	DWORD				ctFile;
	YCString			sCtFile;
};
