mirror of
https://github.com/aaru-dps/docs.git
synced 2025-12-16 19:24:38 +00:00
98 lines
5.0 KiB
Plaintext
98 lines
5.0 KiB
Plaintext
|
|
*** ZIP (PKZip compressed files)
|
|
*** Document revision: 1.3
|
|
*** Last updated: March 11, 2004
|
|
*** Compiler/Editor: Peter Schepers
|
|
*** Contributors/sources: net documents
|
|
|
|
The files seen on the C64 are generally PKZIP 1.1-compatible archives,
|
|
using the older IMPLODE algorithm, which are decompressible on the C64/C128
|
|
using various utilities. All versions of PKUNZIP (and compatible programs)
|
|
will also handle the older archives. The explanation I provide below covers
|
|
up to the newest version PKZIP at the time of writing this document, 2.04g.
|
|
|
|
They always start with the 'PK' string at the beginning of the file, and
|
|
the first filename follows very closely. The example archive below holds
|
|
4-pack ZipCode files, as the filename shows:
|
|
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|
----------------------------------------------- ----------------
|
|
00000: 50 4B 03 04 14 00 00 00 08 00 00 00 00 00 19 A1 PK..............
|
|
00010: EB 0D C2 45 00 00 50 69 00 00 07 00 00 00 31 21 ..............1!
|
|
00020: 4D 53 48 4F 57 E4 BC 7B 5C 53 47 DA 38 3E 67 CE MSHOW...........
|
|
|
|
Bytes: $00-03: PKZIP local file header signature ($50 $4B $03 $04, first
|
|
two bytes are ASCII "PK"). This signature is used at the
|
|
beginning of *each* compressed file.
|
|
04-05: Program version that created archive:
|
|
decimal value/10 = major version # (in this case 2)
|
|
decimal value%10 = minor version # (in this case .0)
|
|
06-07: General purpose bit flags:
|
|
bit 0: set - file is encrypted
|
|
clear - file is not encrytped
|
|
bit 1: if compression method 6 used (imploding)
|
|
set - 8K sliding dictionary
|
|
clear - 4K sliding dictionary
|
|
bit 2: if compression method 6 used (imploding)
|
|
set - 3 Shannon-Fano trees were used to encode
|
|
the sliding dictionary output
|
|
clear - 2 Shannon-Fano trees were used
|
|
|
|
For method 8 compression (deflate):
|
|
bit 2 bit 1
|
|
0 0 Normal (-en) compression
|
|
0 1 Maximum (-ex) compression
|
|
1 0 Fast (-ef) compression
|
|
1 1 Super Fast (-es) compression
|
|
|
|
Note: Bits 1 and 2 are undefined if the
|
|
compression method is any other than 6 or 8.
|
|
bit 3: if compression method 8 (deflate)
|
|
set - the fields crc-32, compressed size and
|
|
uncompressed size are set to zero in the
|
|
local header. The correct values are put
|
|
in the data descriptor immediately
|
|
following the compressed data.
|
|
|
|
The upper three bits are reserved and used internally by
|
|
the software when processing the zipfile. The remaining
|
|
bits are unused.
|
|
08-09: Compression method:
|
|
0 - Stored (no compression)
|
|
1 - Shrunk
|
|
2 - Reduced with compression factor 1
|
|
3 - Reduced with compression factor 2
|
|
4 - Reduced with compression factor 3
|
|
5 - Reduced with compression factor 4
|
|
6 - Imploded
|
|
7 - Reserved for Tokenizing compression algorithm
|
|
8 - Deflated
|
|
0A-0B: Last modified file time in MSDOS format
|
|
Bits 00-04: Seconds/2 (0-58, only even numbers)
|
|
05-10: Minutes (0-59)
|
|
11-15: Hours (0-23, no AM or PM)
|
|
0C-0D: Last modified file date in MSDOS format
|
|
Bits 00-04: Day (1-31)
|
|
05-09: Month (1-12)
|
|
10-15: Year minus 1980
|
|
0E-11: CRC-32 of file (low-high format)
|
|
12-15: Compressed size of file (low-high format)
|
|
16-19: Uncompressed size of file (low-high format)
|
|
1A-1B: Filename length (FL)
|
|
1C-1D: Extra field length, description (EFL)
|
|
1E-(1E+FL-1): Filename
|
|
(1E+FL)-(1E+FL+EFL-1): Extra field
|
|
|
|
You will notice that in the above byte layout, there is no mention of C64
|
|
filetype. That particular field seems to be stored in the central directory
|
|
at the end of the ZIP archive.
|
|
|
|
There are several other signatures used within the ZIP format. The byte
|
|
sequence 50 4B 01 02 is used to signify the beginning of the central
|
|
directory while the byte sequence 50 4B 05 06 is used to show the end of
|
|
the central directory.
|
|
|
|
The above explanation is only included for completeness. Without source
|
|
code, it is almost impossible to work with ZIP archives.
|
|
|