Files
MultiPar/source/par2j/create.h
2023-10-23 10:54:28 +09:00

127 lines
5.2 KiB
C

#ifndef _CREATE_H_
#define _CREATE_H_
#ifdef __cplusplus
extern "C" {
#endif
// PAR 2.0 のパケット・ヘッダーを作成する
void set_packet_header(
unsigned char *buf, // ヘッダーを格納する 64バイトのバッファー
unsigned char *set_id, // Recovery Set ID、16バイト
int type_num, // そのパケットの型番号
unsigned int body_size); // パケットのデータ・サイズ
// ソース・ファイルの情報を集める
int get_source_files(file_ctx_c *files);
// 共通パケットを作成する
int set_common_packet(
unsigned char *buf,
int *packet_num, // 共通パケットの数
int switch_u, // ユニコードのファイル名も記録する
file_ctx_c *files);
// 複数ファイルのハッシュ値を同時に求めるバージョン
int set_common_packet_multi(
unsigned char *buf,
int *packet_num, // 共通パケットの数
int switch_u, // ユニコードのファイル名も記録する
file_ctx_c *files);
// ハッシュ値を後で計算する
int set_common_packet_1pass(
unsigned char *buf,
int *packet_num, // 共通パケットの数
int switch_u, // ユニコードのファイル名も記録する
file_ctx_c *files);
// パケットは作成済みなので、ハッシュ値だけ計算して追加する
int set_common_packet_hash(
unsigned char *buf,
file_ctx_c *files);
// ソース・ファイルの情報から共通パケットのサイズを計算する
int measure_common_packet(
int *packet_num, // 共通パケットの数
int switch_u); // ユニコードのファイル名も記録する
// 末尾パケットを作成する
int set_footer_packet(
unsigned char *buf,
wchar_t *par_comment, // コメント
unsigned char *set_id); // Recovery Set ID
// 末尾パケットのサイズを計算する
int measure_footer_packet(
wchar_t *par_comment); // コメント
// リカバリ・ファイルを作成して共通パケットをコピーする
int create_recovery_file(
wchar_t *recovery_path, // 作業用
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
int block_distri, // パリティ・ブロックの分配方法
int packet_num, // 共通パケットの数
unsigned char *common_buf, // 共通パケットのバッファー
int common_size, // 共通パケットのバッファー・サイズ
unsigned char *footer_buf, // 末尾パケットのバッファー
int footer_size, // 末尾パケットのバッファー・サイズ
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
parity_ctx_c *p_blk); // 各パリティ・ブロックの情報
int create_recovery_file_1pass(
wchar_t *recovery_base,
wchar_t *recovery_path, // 作業用
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
int block_distri, // (3-bit目は番号の付け方)
int packet_num, // 共通パケットの数
unsigned char *common_buf, // 共通パケットのバッファー
int common_size, // 共通パケットのバッファー・サイズ
unsigned char *footer_buf, // 末尾パケットのバッファー
int footer_size, // 末尾パケットのバッファー・サイズ
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
unsigned char *p_buf, // 計算済みのパリティ・ブロック
unsigned char *g_buf, // GPU用 (GPUを使わない場合は NULLにすること)
unsigned int unit_size);
// 作成中のリカバリ・ファイルを削除する
void delete_recovery_file(
wchar_t *recovery_path, // 作業用
int block_distri, // パリティ・ブロックの分配方法
int switch_p, // インデックス・ファイルを作らない
HANDLE *rcv_hFile); // 各リカバリ・ファイルのハンドル
// リカバリ・ファイルのサイズを計算する
void measure_recovery_file(
wchar_t *recovery_path, // ()
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
int block_distri, // パリティ・ブロックの分配方法
int packet_num, // 共通パケットの数
int common_size, // 共通パケットのバッファー・サイズ
int footer_size, // 末尾パケットのバッファー・サイズ
int switch_p); // インデックス・ファイルを作らない
// ソース・ファイルを分割する
int split_files(
file_ctx_c *files,
int *cur_num, int *cur_id); // エラー発生時は、その時点でのファイル番号と分割番号が戻る
// 分割されたソース・ファイルを削除する
void delete_split_files(
file_ctx_c *files,
int max_num, int max_id); // エラー発生時のファイル番号と分割番号
// リカバリ・ファイルをソース・ファイルの末尾にくっつける
int append_recovery_file(
wchar_t *file_name, // ソース・ファイルの名前
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
int no_index); // インデックス・ファイルが存在しない
#ifdef __cplusplus
}
#endif
#endif