SPARK(5)
π SPARK(5) β the archive file format tea π
okay so bestie, this is the manual page for spark, and it's the archive file format for the RISC OS version of the PC archiver Arc. yes it's section 5 of the manual. yes it's a file format. yes we're doing this. grab a snack. π
πΈ CONVENTIONS πΈ
- Strings are given in ASCII with C-style escapes. And listen β there is no terminating character present unless it's explicitly included. so don't go assuming one, she's not always there π
- Words are 32 bit little-endian numbers.
- Half words are 16 bit little-endian numbers.
β¨ FORMAT β¨
An archive file is literally just a sequence of archive marker, archive header and file data. like:
marker1, header1, data1, marker2, header2, data2, etc.
The archive marker is a single byte of value 0x1a (26). And the archive finishes with an archive marker followed by a zero byte. that's the little goodbye wave π
π Header version number
This tells you how the file data is stored and how many bytes there are in the header. The header version numbers for the PC are detailed below, and an Archimedes header version number is identical to the corresponding PC number except it has bit 7 set. iconic behaviour honestly.
1β Old style, no compression2β New style, no compression3β Compression of repeated characters only (RLE)4β As 3 plus Huffman Squeezing5β Lempel-Ziv packing of repeated strings (old style)6β Lempel-Ziv packing of repeated strings (new style)7β Lempel-Ziv Welch packing with improved hash function8β Dynamic Lempel-Ziv packing with adaptive reset9β PKARC style squashing127β Un*x compression
π Filename
14 bytes of name, zero terminated. that's it. that's the whole vibe.
π Compressed length
Compressed data length, one word.
π¦ Date
One half-word, date.
year = (date >> 9) & 0x7f;
month = (date >> 5) & 0x0f;
day = date & 0x1f;
β Time
One half-word, time.
hour = (time >> 11) & 0x1f;
minute = (time >> 5) & 0x3f;
second = (time & 0x1f) * 2;
The time and date fields are always filled in. If the file has a load and exec address, these are the time and date when the file was added to the archive; otherwise, they are derived from the Archimedes datestamp. And in all extract operations on Archimedes format archives, the contents of the load and exec fields take precedence. periodt.
π CRC
One half-word, Cyclic Redundancy Check. she's checking the vibes (the cyclic redundancy ones).
π₯ Original file length
Original file length, one word β and it's only present if header type is greater than 1. no cap.
π Load address
Load address of the file, one word β only present if bit-7 of the header version number is set.
π Exec address
Exec address of the file, one word β only present if bit-7 of the header version number is set.
π Attributes
Attributes of the file, one word β only present if bit-7 of the header version number is set.
π Compressed data...
Directories are stored as non-compressed archives within archives, i.e. their load address & 0xffffff00=0xfffddc. nesting dolls but make it file system.
π COMPATIBILITY π
PC and Archimedes formats may be mixed in one archive for use on the Archimedes. besties coexisting fr fr π«Ά
π« SEE ALSO π«
and that's the whole page, babe π the bottom of it just says SPARK(5)() all over again with the source/version and date slots sitting there completely empty β no version, no date, nothing, she simply refused to fill them in and honestly? respect. mwah πβ¨ππ¦πΈπ
π
π¦ where this page comes from
- debian bookworm: nspark 1.7.8B2+git20210317.cb30779-2 Β· nspark
- debian trixie: nspark 1.7.8B2+git20210317.cb30779-2 Β· nspark
- ubuntu jammy: nspark 1.7.8B2+git20210317.cb30779-2 Β· nspark
- ubuntu noble: nspark 1.7.8B2+git20210317.cb30779-2 Β· nspark
- ubuntu resolute: nspark 1.7.8B2+git20210317.cb30779-2.1 Β· nspark
- ubuntu stonking: nspark 1.7.8B2+git20210317.cb30779-2.1 Β· nspark
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms