|
#39
|
||||
|
||||
|
CLS·DiskSpan v2.0 Reliability + Performance Overhaul for FreeArc Disk-Spanning Windows · 32-bit plugin · built on Razor12911's original · modified by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ OVERVIEW A big reliability + speed overhaul of Razor12911's original FreeArc disk-spanning plugin. The plugin splits a FreeArc archive across multiple volumes (discs) and reassembles them on extraction. ⚠ Matched-pair release: the on-disk volume format changed (clean break). Archives written by v2.0 are unpacked by v2.0 only v2.0 will not read old volumes, and the old version will not read v2.0 volumes. ▌ TECHNICAL SPECIFICATIONS
▌ CREDITS / AUTHORS
▌ WHAT'S NEW IN v2.0 ✦ It just works for EVERY layout Solid (-s;), non-solid (-s-), big/small solid blocks (-s<size>), and file-mask / grouped packs (arc.groups) all span and round-trip correctly. The old "must be fully solid" limitation where anything else silently produced broken discs is GONE. ✦ Mixed group sizes are flagged With file-mask groups, all groups share ONE volume set, so only a single disc size is used (the first block's). A group asking for a different size is kept-and-warned once the set still packs/unpacks fine. Use the same size on every group. ✦ Damage is caught Every disc carries a CRC32 and shares a "set GUID". A truncated, byte-flipped, swapped, or foreign disc is detected and reported instead of silently producing a bad install. ✦ No more hangs or crashes A missing disc in a silent/hidden run fails cleanly with a non-zero exit (never freezes on a hidden dialog), and no Delphi error can crash back into FreeArc failures map to proper CLS error codes. ✦ Safe inside installers The --sort / --makeiso / --version helpers only run under FreeArc's Arc.exe; embedded in an Inno Setup installer (unarc) the DLL never touches the host process, so it can't accidentally close the installer. ✦ You see the REAL reason a span failed On a bad decode FreeArc otherwise prints only its own misleading line. diskspan now prints the true cause first, on its own line e.g. "diskspan: missing volume game-3.bin" or "diskspan: CRC mismatch ...". ✦ An archive kept in a subfolder extracts correctly Sibling discs are found next to the main archive, not in the current directory so arc t out\game-1.bin works (the real conversion flow packs into a subfolder). ✦ The disc-tools are reliable --sort lays the discs into burnable DISC_1, DISC_2 folders (with autorun.inf + setup files) and exits cleanly. --makeiso turns those folders into .ISO images without freezing; a folder is deleted ONLY after its ISO is safely written, so a failing oscdimg.exe can never destroy your discs. ✦ Flexible disc naming (auto-detected no new option) Code:
game-1.bin -> game-2.bin, game-3.bin (classic digit step) data.bin.001 -> data.bin.002, data.bin.003 (numbered extension) setup-1a.bin -> setup-1b.bin ... 1z, 1aa (letters per disc, number fixed) ✦ Locate-a-missing-disc In an interactive run (installer window OR plain console arc x), a Browse dialog lets the user point to a disc that isn't where expected, then the extract continues. Silent/hidden/redirected runs just fail cleanly. ✦ It's faster The per-disc checksum was rewritten (slicing-by-8) and I/O runs in 1 MB chunks (tunable), cutting spanning overhead from ~+96% over a raw store down to ~+20%. At real multi-GB disc sizes the compressor dominates anyway, so spanning is effectively free. ✦ Version probe arc.exe --version prints build, disc-format version and copyright; the DiskSpanInfo() export returns the same string to tools. ▌ ORIGINAL vs MODIFIED (v1 → v2.0) Code:
╭───────────────────────────┬────────────────────────┬────────────────────────────────╮
│ Area │ Original (v1) │ Modified (v2.0) │
├───────────────────────────┼────────────────────────┼────────────────────────────────┤
│ Solid archives │ OK │ OK │
│ Non-solid (-s-) │ SILENT CORRUPTION │ OK │
│ Small blocks (-s<size>) │ SILENT CORRUPTION │ OK │
│ File masks / arc.groups │ unsupported / corrupt │ OK │
│ Mixed group sizes │ SILENT CORRUPTION │ OK (first size wins + warns) │
│ Archive in a subfolder │ extract could fail │ OK │
│ Per-volume integrity │ none │ CRC32 (header + payload) │
│ Wrong / foreign volume │ used blindly │ rejected (set GUID) │
│ Missing volume (hidden) │ could hang on dialog │ clean nonzero exit │
│ Missing volume (UI) │ host prompt only │ browse (UI or console) │
│ Failure reason shown │ FreeArc generic only │ + diskspan's real reason │
│ Disc-1 size budget │ per solid block │ shared across all blocks │
│ Error across DLL boundary │ could crash FreeArc │ mapped to CLS error codes │
│ Volume naming │ digit substitution │ Type 1 / 2 / 3 (auto) │
│ Non-numbered name │ silent _NNN fallback │ warns at pack time │
│ --sort exit code │ wrong ("unknown cmd") │ clean exit 0 │
│ --makeiso │ hung after first ISO │ builds all, safe delete │
│ CRC speed │ n/a (no CRC) │ slicing-by-8 (~20% over) │
│ Copy buffer │ 64 KB │ 1 MB (tunable, CLS_BUFKB) │
│ Version/copyright probe │ none │ --version + DiskSpanInfo() │
│ Build toolchain │ older Delphi │ RAD Studio 13.1, Win32 │
│ Compiler warnings │ several │ zero (clean build) │
╰───────────────────────────┴────────────────────────┴────────────────────────────────╯
▌ QUICK START EXAMPLES Run from the folder holding Arc.exe + cls-diskspan.dll. -w sets a temp folder; diskspan:<first>:<other> = first-disc size : every other disc's size. Put a NUMBER in the archive name. Legend: program · command · method / diskspan · archive · input mask Show the build + copyright Code:
Arc.exe --version Code:
Arc.exe a -ep1 -r -ed -s; -w.\temp -m0+diskspan:2mb:2mb out\game-1.bin "_data\*" Code:
Arc.exe a -ep1 -r -ed -s; -w.\temp -msrep+lzma+diskspan:4467mb:4474mb out\game-1.bin "MyFiles\*" Code:
Arc.exe a -ep1 -r -ed -s- -w.\temp -m0+diskspan:2mb:2mb out\game-1.bin "_data\*" Code:
Arc.exe a -ep1 -r -ed -s8m -w.\temp -m0+diskspan:2mb:2mb out\game-1.bin "_data\*" Code:
Arc.exe a -ep1 -r -ed -s; -w.\temp -mtor+diskspan:2mb:2mb/$grpbin=lzma+diskspan:2mb:2mb out\game-1.bin "_data\*" Code:
Arc.exe t out\game-1.bin Code:
Arc.exe x -dpunpacked\ out\game-1.bin Code:
Arc.exe --sort OutFolder DISC_ setup.exe setup.ico out\game-1.bin Arc.exe --makeiso OutFolder\DISC_ Code:
Arc.exe a ... +diskspan:300mb:400mb data.bin.001 "MyFiles\*" (-> .002, .003) Arc.exe a ... +diskspan:300mb:400mb setup-1a.bin "MyFiles\*" (-> 1b, 1c, ...) Code:
setlocal & set CLS_BUFKB=4096 & Arc.exe ... (4 MB I/O buffer instead of 1 MB) setlocal & set CLS_DEBUG_LOG=1 & Arc.exe ... (write cls-diskspan.log next to the DLL) ▌ TESTS & BENCHMARKS Both live in bin\_test\ and drive the same Arc.exe + cls-diskspan.dll in bin\. run_tests.ps1 round-trip regression suite. Packs 8 scenarios (solid, single-volume, store, groups, non-solid, small-block, groups+blocks, many-volume), extracts each, and SHA-256 compares against the originals. Plus 3 robustness checks: a missing middle disc must fail cleanly, a byte-flipped disc must be caught by the CRC, and a subfolder archive must still round-trip. Prints a PASS/FAIL matrix. Code:
powershell -ExecutionPolicy Bypass -File run_tests.ps1 -DebugLog Code:
powershell -ExecutionPolicy Bypass -File bench.ps1 -SizeMB 120
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ A NOTE FROM THE MODDER I'm not quite a repack guy, so do some rough tests on this with your own data and feel free to report any bug / issue. . Last edited by BLACKFIRE69; Today at 03:24. Reason: Modified the description |
| The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| UltraARC Tutorials, Hints and Examples | Razor12911 | Conversion Tutorials | 35 | 17-03-2021 11:56 |
| Quantum Break | GTX590 | PC Games - CD/DVD Conversions | 105 | 25-03-2019 08:28 |
| Bioshock Infinite Complete Edition (7xDVD5) UltraArc + CIU v2.0.3 By *Yener90* | GTX590 | PC Games - CD/DVD Conversions | 13 | 17-06-2017 10:55 |
| Call of Duty Black OPS 3 + DLC Awakening (11xDVD5) | GTX590 | PC Games - CD/DVD Conversions | 22 | 30-12-2016 07:46 |
| Mortal Kombat XL (7xDVD5) UltraArc + CIU v2.0.3 By *Yener90* | GTX590 | PC Games - CD/DVD Conversions | 1 | 13-10-2016 16:03 |