1// RegisterArc.h
2
3#ifndef __REGISTER_ARC_H
4#define __REGISTER_ARC_H
5
6#include "../Archive/IArchive.h"
7
8typedef IInArchive * (*CreateInArchiveP)();
9typedef IOutArchive * (*CreateOutArchiveP)();
10
11struct CArcInfo
12{
13  const wchar_t *Name;
14  const wchar_t *Ext;
15  const wchar_t *AddExt;
16  Byte ClassId;
17  Byte Signature[16];
18  int SignatureSize;
19  bool KeepName;
20  CreateInArchiveP CreateInArchive;
21  CreateOutArchiveP CreateOutArchive;
22};
23
24void RegisterArc(const CArcInfo *arcInfo);
25
26#define REGISTER_ARC_NAME(x) CRegister ## x
27
28#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \
29    REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \
30    static REGISTER_ARC_NAME(x) g_RegisterArc;
31
32#endif
33