#ifndef _INI_H_
#define _INI_H_

#ifdef __cplusplus
extern "C" {
#endif


#define INI_NAME_LEN	38		// 検査結果ファイルのファイル名の文字数

extern int recent_data;

// リカバリ・ファイルの新規作成時に、同じ Set ID の記録があれば消去しておく
void reset_ini_file(unsigned char *set_id);

// 検査するリカバリ・ファイルが同じであれば、再検査する必要は無い
int check_ini_file(unsigned char *set_id);
void close_ini_file(void);
void write_ini_file2(unsigned char *par_client, wchar_t *par_comment);
void write_ini_file(file_ctx_r *files);
int read_ini_file(wchar_t *uni_buf, file_ctx_r *files);

int check_ini_recovery(
	HANDLE hFile,			// リカバリ・ファイルのハンドル
	unsigned int meta[7]);	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号

void write_ini_recovery(int id, __int64 off);

void write_ini_recovery2(
	int packet_count,		// そのリカバリ・ファイル内に含まれるパケットの数
	int block_count,		// そのリカバリ・ファイル内に含まれるパリティ・ブロックの数
	int bad_flag,
	unsigned int meta[7]);	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号

int read_ini_recovery(
	int num,
	int *packet_count,		// そのリカバリ・ファイル内に含まれるパケットの数
	int *block_count,		// そのリカバリ・ファイル内に含まれるパリティ・ブロックの数
	int *bad_flag,
	parity_ctx_r *p_blk);	// 各パリティ・ブロックの情報

// Input File Slice Checksum を書き込む
void write_ini_checksum(
	file_ctx_r *files,		// 各ソース・ファイルの情報
	source_ctx_r *s_blk);	// 各ソース・ブロックの情報

// Input File Slice Checksum を読み込む
int read_ini_checksum(
	file_ctx_r *files,		// 各ソース・ファイルの情報
	source_ctx_r *s_blk);	// 各ソース・ブロックの情報

// Input File Slice Checksum が不完全でも読み書きする
void update_ini_checksum(
	file_ctx_r *files,		// 各ソース・ファイルの情報
	source_ctx_r *s_blk);	// 各ソース・ブロックの情報

void write_ini_state(
	int num,				// ファイル番号
	unsigned int meta[7],	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号
	int result);			// 検査結果 0～=何ブロック目まで一致, -3=完全に一致

int check_ini_state(
	int num,				// ファイル番号
	unsigned int meta[7],	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号
	HANDLE hFile);			// そのファイルのハンドル

void write_ini_complete(
	int num,				// ファイル番号
	wchar_t *file_path);	// ソース・ファイルの絶対パス

int check_ini_verify(
	wchar_t *file_name,		// 表示するファイル名
	HANDLE hFile,			// ファイルのハンドル
	int num1,				// チェックサムを比較したファイルの番号
	unsigned int meta[7],	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号
	file_ctx_r *files,		// 各ソース・ファイルの情報
	source_ctx_r *s_blk,	// 各ソース・ブロックの情報
	slice_ctx *sc);			// スライス検査用の情報

void write_ini_verify(int id, int flag, __int64 off);

void write_ini_verify2(
	int num1,				// チェックサムを比較したファイルの番号
	unsigned int meta[7],	// サイズ、作成日時、更新日時、ボリューム番号、オブジェクト番号
	int max);				// 記録したブロック数

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

// 作業用のテンポラリ・ファイルを開く
int open_temp_file(
	wchar_t *temp_path,		// 作業用、基準ディレクトリが入ってる
	int num,				// 見つけたスライスが属するファイル番号
	file_ctx_r *files,		// 各ソース・ファイルの情報
	slice_ctx *sc);


#ifdef __cplusplus
}
#endif

#endif
