4 #define SIZEOF_MARKHEAD 7
5 #define SIZEOF_OLDMHD 7
6 #define SIZEOF_NEWMHD 13
7 #define SIZEOF_OLDLHD 21
8 #define SIZEOF_NEWLHD 32
9 #define SIZEOF_SHORTBLOCKHEAD 7
10 #define SIZEOF_LONGBLOCKHEAD 11
11 #define SIZEOF_SUBBLOCKHEAD 14
12 #define SIZEOF_COMMHEAD 13
13 #define SIZEOF_PROTECTHEAD 26
14 #define SIZEOF_AVHEAD 14
15 #define SIZEOF_SIGNHEAD 15
16 #define SIZEOF_UOHEAD 18
17 #define SIZEOF_MACHEAD 22
18 #define SIZEOF_EAHEAD 24
19 #define SIZEOF_BEEAHEAD 24
20 #define SIZEOF_STREAMHEAD 26
23 #define PACK_CRYPT_VER 29
27 #define PROTECT_VER 20
29 #define MHD_VOLUME 0x0001
30 #define MHD_COMMENT 0x0002
31 #define MHD_LOCK 0x0004
32 #define MHD_SOLID 0x0008
33 #define MHD_PACK_COMMENT 0x0010
34 #define MHD_NEWNUMBERING 0x0010
36 #define MHD_PROTECT 0x0040
37 #define MHD_PASSWORD 0x0080
38 #define MHD_FIRSTVOLUME 0x0100
40 #define LHD_SPLIT_BEFORE 0x0001
41 #define LHD_SPLIT_AFTER 0x0002
42 #define LHD_PASSWORD 0x0004
43 #define LHD_COMMENT 0x0008
44 #define LHD_SOLID 0x0010
46 #define LHD_WINDOWMASK 0x00e0
47 #define LHD_WINDOW64 0x0000
48 #define LHD_WINDOW128 0x0020
49 #define LHD_WINDOW256 0x0040
50 #define LHD_WINDOW512 0x0060
51 #define LHD_WINDOW1024 0x0080
52 #define LHD_WINDOW2048 0x00a0
53 #define LHD_WINDOW4096 0x00c0
54 #define LHD_DIRECTORY 0x00e0
56 #define LHD_LARGE 0x0100
57 #define LHD_UNICODE 0x0200
58 #define LHD_SALT 0x0400
59 #define LHD_VERSION 0x0800
60 #define LHD_EXTTIME 0x1000
61 #define LHD_EXTFLAGS 0x2000
63 #define SKIP_IF_UNKNOWN 0x4000
64 #define LONG_BLOCK 0x8000
66 #define EARC_NEXT_VOLUME 0x0001
67 #define EARC_DATACRC 0x0002
68 #define EARC_REVSPACE 0x0004
69 #define EARC_VOLNUMBER 0x0008
72 MARK_HEAD=0x72,MAIN_HEAD=0x73,FILE_HEAD=0x74,COMM_HEAD=0x75,AV_HEAD=0x76,
73 SUB_HEAD=0x77,PROTECT_HEAD=0x78,SIGN_HEAD=0x79,NEWSUB_HEAD=0x7a,
77 enum { EA_HEAD=0x100,UO_HEAD=0x101,MAC_HEAD=0x102,BEEA_HEAD=0x103,
78 NTACL_HEAD=0x104,STREAM_HEAD=0x105 };
81 HOST_MSDOS=0,HOST_OS2=1,HOST_WIN32=2,HOST_UNIX=3,HOST_MACOS=4,
85 #define SUBHEAD_TYPE_CMT "CMT"
86 #define SUBHEAD_TYPE_ACL "ACL"
87 #define SUBHEAD_TYPE_STREAM "STM"
88 #define SUBHEAD_TYPE_UOWNER "UOW"
89 #define SUBHEAD_TYPE_AV "AV"
90 #define SUBHEAD_TYPE_RR "RR"
91 #define SUBHEAD_TYPE_OS2EA "EA2"
92 #define SUBHEAD_TYPE_BEOSEA "EABE"
94 /* new file inherits a subblock when updating a host file */
95 #define SUBHEAD_FLAGS_INHERITED 0x80000000
97 #define SUBHEAD_FLAGS_CMT_UNICODE 0x00000001
131 HEADER_TYPE HeadType;//byte
137 if (HeadType==SUB_HEAD)
139 if (HeadType==NEWSUB_HEAD && (Flags & LHD_SOLID)!=0)
145 struct BlockHeader:BaseBlock
154 struct MainHeader:BlockHeader
163 struct FileHeader:BlockHeader
184 byte Salt[SALT_SIZE];
194 void Clear(int SubDataSize)
196 SubData.Alloc(SubDataSize);
201 bool CmpName(const char *Name)
203 return(strcmp(FileName,Name)==0);
206 FileHeader& operator = (FileHeader &hd)
209 memcpy(this,&hd,sizeof(*this));
217 struct EndArcHeader:BaseBlock
224 struct SubBlockHeader:BlockHeader
231 struct CommentHeader:BaseBlock
240 struct ProtectHeader:BlockHeader
249 struct AVHeader:BaseBlock
258 struct SignHeader:BaseBlock
266 struct UnixOwnersHeader:SubBlockHeader
268 ushort OwnerNameSize;
269 ushort GroupNameSize;
276 struct EAHeader:SubBlockHeader
285 struct StreamHeader:SubBlockHeader
291 ushort StreamNameSize;
297 struct MacFInfoHeader:SubBlockHeader