102 lines
3.4 KiB
Plaintext
102 lines
3.4 KiB
Plaintext
--------------------------------------------------------------------------------
|
|
Archive Structure Text file.
|
|
revision 1.0
|
|
|
|
Applicable for reSource v2.1 and above.
|
|
Last Modified: 11/December/2000
|
|
|
|
reSource (C) 1998-2001 Victor Kasenda / gruv
|
|
http://go.to/gruv
|
|
|
|
revisions:
|
|
1.0: Final revision. Added more comments.
|
|
0.3: Added archive signature
|
|
0.2: Cleaned up and added several data
|
|
0.1: Initial version
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
Data types and definition:
|
|
--------------------------
|
|
byte - basic unit.
|
|
longint - 4 bytes. (Long Integer. Can take a negative value.)
|
|
string - variable length + null termination
|
|
... - variable size. Also used to indicate the data can be repeated as
|
|
many times as wanted.
|
|
|
|
|
|
General Format of a reSource Archive
|
|
------------------------------------
|
|
The extension for a reSource archive is 'rS'. All archives have a signature to
|
|
confirm that it is a reSource archive.
|
|
An empty archive is one that has no files. It must have a valid signature and
|
|
a central directory end header.
|
|
A zero byte file is not a valid archive.
|
|
Generally, the reSource archive will have an archive header, as many data
|
|
blocks as needed, a central directory and a central directory end record.
|
|
|
|
Signatures:
|
|
-----------
|
|
Long integers are stored in groups of 4 bytes. The byte with the lsb goes
|
|
first. So the signatures values had to be reversed to allow them to be seen by
|
|
a hex editor.
|
|
The signatures are stored in ArchiveHeadersUnit.
|
|
|
|
|
|
Headers
|
|
-------
|
|
Each header has a corresponding class.
|
|
For some headers, the actual size in bytes is required so it is stored in
|
|
a constant e.g. DATA_HEADER_SIZE is the size of a data header.
|
|
|
|
Data Header
|
|
-----------
|
|
Each data block has a data header.
|
|
first similarity index - first char to start with when restoring the block
|
|
virtual smallest char - it does not exist, so it is not output to the block.
|
|
when restoring, leave a space at this index to pretend it's there. used in
|
|
sada sort.
|
|
|
|
|
|
|
|
Overall reSource format:
|
|
[archive header]
|
|
[data header + data block] . . .
|
|
[central directory] end of central directory record
|
|
|
|
A. Archive Header
|
|
reSource Archive signature 4 bytes ('RSVK')
|
|
|
|
B. Data Header
|
|
Data header signature 4 bytes ('DATA')
|
|
crc 32 4 bytes
|
|
compressed size 4 bytes
|
|
first similarity index 4 bytes
|
|
virtual smallest char index 4 bytes
|
|
|
|
|
|
C. Central Director Structure:
|
|
|
|
[file header] . . . + end of central directory record
|
|
|
|
File Header:
|
|
|
|
Central file header signature 4 bytes ('CFHS')
|
|
compressed size 4 bytes
|
|
uncompressed size 4 bytes
|
|
number of blocks 4 bytes
|
|
offset of first local data header 4 bytes
|
|
|
|
(attributes)
|
|
time (dos date + time) 4 bytes
|
|
attr 4 bytes
|
|
file name string
|
|
|
|
End Of Central Directory Record:
|
|
|
|
Signature 4 bytes ('ECDR') End of Central Directory Record
|
|
Block Size 4 bytes
|
|
offset of first Central File Header 4 bytes
|
|
|
|
|