-------------------------------------------------------------------------------- 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.