update libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / lzma-22.01 / 7zFormat.txt
CommitLineData
9e052883 17z Format description (18.06)\r
2----------------------------\r
3\r
4This file contains description of 7z archive format. \r
57z archive can contain files compressed with any method.\r
6See "Methods.txt" for description for defined compressing methods.\r
7\r
8\r
9Format structure Overview\r
10-------------------------\r
11\r
12Some fields can be optional.\r
13\r
14Archive structure\r
15~~~~~~~~~~~~~~~~~ \r
16SignatureHeader\r
17[PackedStreams]\r
18[PackedStreamsForHeaders]\r
19[\r
20 Header \r
21 or \r
22 {\r
23 Packed Header\r
24 HeaderInfo\r
25 }\r
26]\r
27\r
28\r
29\r
30Header structure\r
31~~~~~~~~~~~~~~~~ \r
32{\r
33 ArchiveProperties\r
34 AdditionalStreams\r
35 {\r
36 PackInfo\r
37 {\r
38 PackPos\r
39 NumPackStreams\r
40 Sizes[NumPackStreams]\r
41 CRCs[NumPackStreams]\r
42 }\r
43 CodersInfo\r
44 {\r
45 NumFolders\r
46 Folders[NumFolders]\r
47 {\r
48 NumCoders\r
49 CodersInfo[NumCoders]\r
50 {\r
51 ID\r
52 NumInStreams;\r
53 NumOutStreams;\r
54 PropertiesSize\r
55 Properties[PropertiesSize]\r
56 }\r
57 NumBindPairs\r
58 BindPairsInfo[NumBindPairs]\r
59 {\r
60 InIndex;\r
61 OutIndex;\r
62 }\r
63 PackedIndices\r
64 }\r
65 UnPackSize[Folders][Folders.NumOutstreams]\r
66 CRCs[NumFolders]\r
67 }\r
68 SubStreamsInfo\r
69 {\r
70 NumUnPackStreamsInFolders[NumFolders];\r
71 UnPackSizes[]\r
72 CRCs[]\r
73 }\r
74 }\r
75 MainStreamsInfo\r
76 {\r
77 (Same as in AdditionalStreams)\r
78 }\r
79 FilesInfo\r
80 {\r
81 NumFiles\r
82 Properties[]\r
83 {\r
84 ID\r
85 Size\r
86 Data\r
87 }\r
88 }\r
89}\r
90\r
91HeaderInfo structure\r
92~~~~~~~~~~~~~~~~~~~~\r
93{\r
94 (Same as in AdditionalStreams)\r
95}\r
96\r
97\r
98\r
99Notes about Notation and encoding\r
100---------------------------------\r
101\r
1027z uses little endian encoding.\r
103\r
1047z archive format has optional headers that are marked as\r
105[]\r
106Header\r
107[]\r
108\r
109REAL_UINT64 means real UINT64.\r
110\r
111UINT64 means real UINT64 encoded with the following scheme:\r
112\r
113 Size of encoding sequence depends from first byte:\r
114 First_Byte Extra_Bytes Value\r
115 (binary) \r
116 0xxxxxxx : ( xxxxxxx )\r
117 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y\r
118 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y\r
119 ...\r
120 1111110x BYTE y[6] : ( x << (8 * 6)) + y\r
121 11111110 BYTE y[7] : y\r
122 11111111 BYTE y[8] : y\r
123\r
124\r
125\r
126Property IDs\r
127------------\r
128\r
1290x00 = kEnd\r
130\r
1310x01 = kHeader\r
132\r
1330x02 = kArchiveProperties\r
134 \r
1350x03 = kAdditionalStreamsInfo\r
1360x04 = kMainStreamsInfo\r
1370x05 = kFilesInfo\r
138 \r
1390x06 = kPackInfo\r
1400x07 = kUnPackInfo\r
1410x08 = kSubStreamsInfo\r
142\r
1430x09 = kSize\r
1440x0A = kCRC\r
145\r
1460x0B = kFolder\r
147\r
1480x0C = kCodersUnPackSize\r
1490x0D = kNumUnPackStream\r
150\r
1510x0E = kEmptyStream\r
1520x0F = kEmptyFile\r
1530x10 = kAnti\r
154\r
1550x11 = kName\r
1560x12 = kCTime\r
1570x13 = kATime\r
1580x14 = kMTime\r
1590x15 = kWinAttributes\r
1600x16 = kComment\r
161\r
1620x17 = kEncodedHeader\r
163\r
1640x18 = kStartPos\r
1650x19 = kDummy\r
166\r
167\r
1687z format headers\r
169-----------------\r
170\r
171SignatureHeader\r
172~~~~~~~~~~~~~~~\r
173 BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};\r
174\r
175 ArchiveVersion\r
176 {\r
177 BYTE Major; // now = 0\r
178 BYTE Minor; // now = 4\r
179 };\r
180\r
181 UINT32 StartHeaderCRC;\r
182\r
183 StartHeader\r
184 {\r
185 REAL_UINT64 NextHeaderOffset\r
186 REAL_UINT64 NextHeaderSize\r
187 UINT32 NextHeaderCRC\r
188 }\r
189\r
190\r
191...........................\r
192\r
193\r
194ArchiveProperties\r
195~~~~~~~~~~~~~~~~~\r
196BYTE NID::kArchiveProperties (0x02)\r
197for (;;)\r
198{\r
199 BYTE PropertyType;\r
200 if (aType == 0)\r
201 break;\r
202 UINT64 PropertySize;\r
203 BYTE PropertyData[PropertySize];\r
204}\r
205\r
206\r
207Digests (NumStreams)\r
208~~~~~~~~~~~~~~~~~~~~~\r
209 BYTE AllAreDefined\r
210 if (AllAreDefined == 0)\r
211 {\r
212 for(NumStreams)\r
213 BIT Defined\r
214 }\r
215 UINT32 CRCs[NumDefined]\r
216\r
217\r
218PackInfo\r
219~~~~~~~~~~~~\r
220 BYTE NID::kPackInfo (0x06)\r
221 UINT64 PackPos\r
222 UINT64 NumPackStreams\r
223\r
224 []\r
225 BYTE NID::kSize (0x09)\r
226 UINT64 PackSizes[NumPackStreams]\r
227 []\r
228\r
229 []\r
230 BYTE NID::kCRC (0x0A)\r
231 PackStreamDigests[NumPackStreams]\r
232 []\r
233\r
234 BYTE NID::kEnd\r
235\r
236\r
237Folder\r
238~~~~~~\r
239 UINT64 NumCoders;\r
240 for (NumCoders)\r
241 {\r
242 BYTE \r
243 {\r
244 0:3 CodecIdSize\r
245 4: Is Complex Coder\r
246 5: There Are Attributes\r
247 6: Reserved\r
248 7: There are more alternative methods. (Not used anymore, must be 0).\r
249 } \r
250 BYTE CodecId[CodecIdSize]\r
251 if (Is Complex Coder)\r
252 {\r
253 UINT64 NumInStreams;\r
254 UINT64 NumOutStreams;\r
255 }\r
256 if (There Are Attributes)\r
257 {\r
258 UINT64 PropertiesSize\r
259 BYTE Properties[PropertiesSize]\r
260 }\r
261 }\r
262 \r
263 NumBindPairs = NumOutStreamsTotal - 1;\r
264\r
265 for (NumBindPairs)\r
266 {\r
267 UINT64 InIndex;\r
268 UINT64 OutIndex;\r
269 }\r
270\r
271 NumPackedStreams = NumInStreamsTotal - NumBindPairs;\r
272 if (NumPackedStreams > 1)\r
273 for(NumPackedStreams)\r
274 {\r
275 UINT64 Index;\r
276 };\r
277\r
278\r
279\r
280\r
281Coders Info\r
282~~~~~~~~~~~\r
283\r
284 BYTE NID::kUnPackInfo (0x07)\r
285\r
286\r
287 BYTE NID::kFolder (0x0B)\r
288 UINT64 NumFolders\r
289 BYTE External\r
290 switch(External)\r
291 {\r
292 case 0:\r
293 Folders[NumFolders]\r
294 case 1:\r
295 UINT64 DataStreamIndex\r
296 }\r
297\r
298\r
299 BYTE ID::kCodersUnPackSize (0x0C)\r
300 for(Folders)\r
301 for(Folder.NumOutStreams)\r
302 UINT64 UnPackSize;\r
303\r
304\r
305 []\r
306 BYTE NID::kCRC (0x0A)\r
307 UnPackDigests[NumFolders]\r
308 []\r
309\r
310 \r
311\r
312 BYTE NID::kEnd\r
313\r
314\r
315\r
316SubStreams Info\r
317~~~~~~~~~~~~~~\r
318 BYTE NID::kSubStreamsInfo; (0x08)\r
319\r
320 []\r
321 BYTE NID::kNumUnPackStream; (0x0D)\r
322 UINT64 NumUnPackStreamsInFolders[NumFolders];\r
323 []\r
324\r
325\r
326 []\r
327 BYTE NID::kSize (0x09)\r
328 UINT64 UnPackSizes[]\r
329 []\r
330\r
331\r
332 []\r
333 BYTE NID::kCRC (0x0A)\r
334 Digests[Number of streams with unknown CRC]\r
335 []\r
336\r
337 \r
338 BYTE NID::kEnd\r
339\r
340\r
341Streams Info\r
342~~~~~~~~~~~~\r
343\r
344 []\r
345 PackInfo\r
346 []\r
347\r
348\r
349 []\r
350 CodersInfo\r
351 []\r
352\r
353\r
354 []\r
355 SubStreamsInfo\r
356 []\r
357\r
358 BYTE NID::kEnd\r
359\r
360\r
361FilesInfo\r
362~~~~~~~~~\r
363 BYTE NID::kFilesInfo; (0x05)\r
364 UINT64 NumFiles\r
365\r
366 for (;;)\r
367 {\r
368 BYTE PropertyType;\r
369 if (aType == 0)\r
370 break;\r
371\r
372 UINT64 Size;\r
373\r
374 switch(PropertyType)\r
375 {\r
376 kEmptyStream: (0x0E)\r
377 for(NumFiles)\r
378 BIT IsEmptyStream\r
379\r
380 kEmptyFile: (0x0F)\r
381 for(EmptyStreams)\r
382 BIT IsEmptyFile\r
383\r
384 kAnti: (0x10)\r
385 for(EmptyStreams)\r
386 BIT IsAntiFile\r
387 \r
388 case kCTime: (0x12)\r
389 case kATime: (0x13)\r
390 case kMTime: (0x14)\r
391 BYTE AllAreDefined\r
392 if (AllAreDefined == 0)\r
393 {\r
394 for(NumFiles)\r
395 BIT TimeDefined\r
396 }\r
397 BYTE External;\r
398 if(External != 0)\r
399 UINT64 DataIndex\r
400 []\r
401 for(Definded Items)\r
402 REAL_UINT64 Time\r
403 []\r
404 \r
405 kNames: (0x11)\r
406 BYTE External;\r
407 if(External != 0)\r
408 UINT64 DataIndex\r
409 []\r
410 for(Files)\r
411 {\r
412 wchar_t Names[NameSize];\r
413 wchar_t 0;\r
414 }\r
415 []\r
416\r
417 kAttributes: (0x15)\r
418 BYTE AllAreDefined\r
419 if (AllAreDefined == 0)\r
420 {\r
421 for(NumFiles)\r
422 BIT AttributesAreDefined\r
423 }\r
424 BYTE External;\r
425 if(External != 0)\r
426 UINT64 DataIndex\r
427 []\r
428 for(Definded Attributes)\r
429 UINT32 Attributes\r
430 []\r
431 }\r
432 }\r
433\r
434\r
435Header\r
436~~~~~~\r
437 BYTE NID::kHeader (0x01)\r
438\r
439 []\r
440 ArchiveProperties\r
441 []\r
442\r
443 []\r
444 BYTE NID::kAdditionalStreamsInfo; (0x03)\r
445 StreamsInfo\r
446 []\r
447\r
448 []\r
449 BYTE NID::kMainStreamsInfo; (0x04)\r
450 StreamsInfo\r
451 []\r
452\r
453 []\r
454 FilesInfo\r
455 []\r
456\r
457 BYTE NID::kEnd\r
458\r
459\r
460HeaderInfo\r
461~~~~~~~~~~\r
462 []\r
463 BYTE NID::kEncodedHeader; (0x17)\r
464 StreamsInfo for Encoded Header\r
465 []\r
466\r
467\r
468---\r
469End of document\r