|
Archiver, 7z Alternative and FreeArc Replacement
Archiver, a new archiving project
Fox Archiver — WIP 7.7 (Alpha)
After a long stretch of refactoring, this build is the first one I'm calling alpha rather than just "WIP." The distinction matters: the public API is now stable enough to expose, the internals have been rewritten rather than patched, and there's a real installer. It is still pre-alpha. Do not archive anything you don't have a second copy of.
The big one: full LZMA SDK integration
The entire LZMA SDK (26.02) is now imported into the project. Raw LZMA, LZMA2, and the XZ container are native — these are the backbone of the archiver going forward, no longer bolted on through external libraries.
This has been the single most painful part of the project. LZMA2 works by splitting data into chunks and packing each through LZMA using shared compression props, which is straightforward until you need it to stream. My implementation writes to an internal pipe so the data slides through continuously, and decompression is multithreaded.
Worth being honest about: the new Delphi LZMA2/LZMA/XZ/7z path from SDK 26.01 is still rough. Compressing 100 MB currently takes around four hours. It's in the tree, it's not what you should be using yet.
Patch engine — complete redesign
After several failed attempts, the patching engine has been rebuilt on HDiff logic. The headline capability: you can now patch entire folders in one operation.
The engine produces a single patch file that is itself deduplicated and compressed. Applying it decompresses and patches in one pass — no shuffling copies of a game directory back and forth. This is exposed as a native API call, so patching a game shows progress like a normal decompression.
Architecture: public variables are gone
Every public variable has been dropped in favour of a single record that drives both compression and decompression. Compression, decompression, and the archive updater have all been cleanly rewritten. The public API is exposed to the degree needed for a real release.
I'll rewrite parts of this again — but the shape is right now, and that's what was blocking everything else.
Precomp expansion
LZO 2.10 implemented natively in Delphi — precomp > lzo now works the same way zlib does, no external dependency
Proper headers added throughout
Internal deduplication and compression for the GUI
I/O
New -exec2 handler, silent mode — see help for usage
Various minor bug fixes and optimizations
Explorer integration
The shell extension is rebuilt in C++ with static CRT linkage, so it loads in Explorer without any Delphi runtime dependency. Right-click gives you compress, decompress, test, and hash actions. There's an installer now, with a proper license and pre-install information screen.
Known limitations
I'd rather list these than have you find them:
Won't be fixed:
ZSTD cannot use a window larger than 1 GB on 32-bit — :w30 is the ceiling, and 32-bit can't even decompress beyond it
PackMP3 is single-threaded; their init sequence has buffers that clear each other out
The Precomp codec can't chain in multi-succession — one instance per chain, but within that instance use whatever you want, to any depth up to 10
Known, may be fixed:
The 32-bit build uses 64-bit placeholders; 32-bit wasn't in the original plan
Brunsli in Precomp has out-of-bounds bugs. PackJPG by YadeWira is the better path and the only maintained option
__________________
My projects : Masked Compression, lzma2(xz) on Freearc, Zstd compressor for windows
My optimizations : packjpg.exe, zstd, lzham, precomp-dev-0.45.
Last edited by panker1992; 07-08-2026 at 15:20.
Reason: Added Archiver Alpha
|