PackDir
From Just Solve the File Format Problem
(Difference between revisions)
(→Software) |
(Timestamp formula given was not completely correct, and not needed in the age of 64-bit ints.) |
||
Line 12: | Line 12: | ||
32bit ints are in LSB format. Strings are NULL-terminated ASCII. | 32bit ints are in LSB format. Strings are NULL-terminated ASCII. | ||
− | File/directory dates and times are stored in a RISC OS format | + | File/directory dates and times are stored in a RISC OS format: The low 8 bits of the "load" address, combined with the "exec" address, are a 40-bit integer representing the number of 0.01-second intervals since the beginning of 1900. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
File format: | File format: |
Revision as of 19:38, 9 February 2019
PackDir is an archiving tool for RISC OS. It can compress file using an LZW algorithm, or store uncompressed files.
The LZW algorithm is the variant that is used in the ZOO archiver.
File format
I have reverse engineered the file format.
32bit ints are in LSB format. Strings are NULL-terminated ASCII.
File/directory dates and times are stored in a RISC OS format: The low 8 bits of the "load" address, combined with the "exec" address, are a 40-bit integer representing the number of 0.01-second intervals since the beginning of 1900.
File format:
Header object_entry_1 object_entry_2 ... object_entry_N
Header:
String: "PACK\0" 32bit_int: LZW maxbits - 12
object_entry:
string: object_name (including trailing NULL) 32bit_int: load (RISC OS load address) 32bit_int: exec (RISC OS exec address) 32bit_int: original_file_length if this object is a file, number_of_child_entries otherwise 32bit_int: attributes (RISC OS read/write permissions) 32bit_int: entry_type: 1 == directory, 2 == file. NB: This field is missing for the first entry in the file - the first entry is always a directory
If the entry is a file, then these fields follow:
32bit_int: Compressed_file_length 32bit_int: Compression_type: -1 == Not compressed, otherwise compressed with LZW. N bytes: archived file data. N == compressed_file_length if compression_type == -1, otherwise original_file_length
Software
- PackDir download page (RISC OS software)
- riscosarc