Victor Kasenda resource archive source code (c) 1998-2001 Victor Kasenda / gruv. Similar to a BZIP2 Tarball.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

144 lines
5.0 KiB

--------------------------------------------------------------------------------
Notes file
reSource (C) 1998-2001 Victor Kasenda / gruv
--------------------------------------------------------------------------------
This file contains important information that should be reviewed before the
software, reSource, is released.
Pre Release Check list
----------------------
+ Check that all 'debug' statements are removed. All statements preceded by
a comment with the word 'debug' should be checked and removed if necessary.
+ remove debug columns from file list
If there are errors:
--------------------
- SendMessage in MainForm, parameter typecasted to longint to prevent range
check error.
- Block has indexes -1 to over the block size. When doing memory compares or
passing compares, make sure the same type is passed and memory is accessed
correctly i.e. From 0.
- if manually decoding then init may be necessary e.g. mtfEncode/Decode
if wrapper is called then may not need. ariEncodeBlock/DecodeBlock
Design Notes:
Archive Manager -> Block compressor -> Output file.
The archive manager chops the file into blocks.
Each block is passed to the block compressor
The block compressor compresses each block and writes it to the output file.
reSource probably cannot be used on tape backup systems due to its file
structure. Decompressing requires several random seeks to be done. If support
was to be added, then local file headers at the start of each data block would
have to be added which add to the archive size.
Drag and drop Notes:
During drag and drop, the path of the file is ignored. All files are dumped
in the drop directory. Duplicate names are handled by decompressing everything
into a common temp directory. User will be asked whether he wants to overwrite
the file. This behaviour is similar to Winzip.
Variable Type Selection:
Longint and Longword
--------------------
Longint should be enough for storing sizes, index etc. 2 gigs.
Only if unsigned or 4 gigs is necessary then longword should be used.
Buffer sizes
------------
It seems RLEncoder may expand the block (UC.EXE)
Therefore 10% of BlockSize have been added as overflow areas.
Deleting files
--------------
The interface will confirm the deletion of every file first before actually
calling archive manager to delete the files.
Therefore, cancel aborts the whole operation and nothing is changed in the
archive.
Adding files
------------
Shared files
------------
Adding of shared files is allowed. Files that are currently being added
are also allowed to be read. The file mode is fmShareDenyWrite, where
only writing is denied. An exe that is currently running can be added.
Input file cannot be opened
---------------------------
If the disk is not ready, or the input file cannot be opened, EFOpenError
is raised and captured in ArchiveManager.AddFiles. The file will not be
added. The user can add it himself later on when the problem is fixed.
Adding the archive file itself
------------------------------
This is checked for and the archive will be deselected upon pressing the
ok button in the add dialog.
File names
----------
Duplicate file names can be added to the archive.
The files can be differentiated by their dates and times.
The user will be alerted if a file of duplicate name is added to the archive.
He will be given a choice whether he wants to add it or not.
Zero length files
-----------------
It is possible to add zero length files.
Drag and Drop
-------------
If only one file is dropped and this file is a reSource archive, then
it is opened instead of being added. To add reSource archives, use Add.
Valid Archives
--------------
A valid archive contains at least a signature and an EndOfCentralDir header.
A 0 byte file is not a valid archive.
Opening Archives
----------------
EWrongSignature will be raised if the archive to be opened is corrupted.
An extension is compulsary. Due to a bug in the TFileStream.Create routine,
if a directory 'z' exists and you try to open a file called 'z', an EFCreateError
will occur. reSource currently overcomes this by forcing an extension.
e.g. 'z' --> 'z.rs'
'z.' -> 'z.rs'
'z.rs > 'z.rs'
The logic and algo can be found in ArchiveManager.OpenArchive. A dot is
first checed for then the extension is checked and added if needed.
Interface
---------
The interface may be slow in updating, especially during adding and extraction
of files. This is because the compressor and decompressor operates on blocks
of data and should not be interrupted half way. Adding of
Application.ProcessMessages throughout the operations may slow things down
greatly.
Therefore ProcessMessages is called after adding/extraction of every block.
Archive file name
-----------------
The archive file name will be displayed on the title bar.