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