1// RegisterArc.h
2
3#ifndef __REGISTERARC_H
4#define __REGISTERARC_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_DEC_SIG(x) struct REGISTER_ARC_NAME(x) { \
29    REGISTER_ARC_NAME(x)() { g_ArcInfo.Signature[0]--; RegisterArc(&g_ArcInfo); }}; \
30    static REGISTER_ARC_NAME(x) g_RegisterArc;
31
32#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \
33    REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \
34    static REGISTER_ARC_NAME(x) g_RegisterArc;
35
36#endif
37