-range [START],[STOP] (or -range [OFFSET] for a single offset). These values are always taken in hex.
-nextoffset : File scanners will move offset based on the position of the reader after successfully parsing a file. The default behavior has now been changed to always incrementing offset by one.
-syncscan : Disables multi-threaded parsing of individual files.
Unknown/invalid command line arguments are now printed to the console as a warning.
PressAnyKeyToContinue when path isn't found now only triggers if LogToConsole is true.
Scanning changes
A lot of refactoring in Program.
Parsers are now stored as Func<FileOffsetScanner>.
Parsers are now populated in alphabetical order.
ISO and invalid file extensions are now checked using a shared function.
Added ProcessISO function.
Renamed ProcessFile to ScanFile.
Added ProcessFile function, which processes a file for each scanner (can't be used in ProcessISO).
ProcessFiles is no longer a recursive function.
Fixed handling of file progress.
Renamed Program.UpdateProgress to UpdateFileProgress.
Added Program.ResetFileProgress, which is called before the start of a file, or at the start of a new parser when not async (with true parameter).
Renamed Program.WaitWhileHalted to WaitOnScanState. This function now sleeps for 1ms to give priority to other threads while waiting to unpause.
Scan can now be canceled. WaitOnScanState returns true if cancellation has been requested, in which case, the function calling this should return/break and cleanup.
Made more variables virtual that should be virtual.
Added dedicated functions CancelScan and PauseScan, rather than changing Program fields/properties.
CancelScan is now called when PreviewForm is closing.
Added (unused) FileOffsetStream, which is a wrapper around another stream used to track the farthest position a file was read at. This is not setup yet during Program.ScanFile, and is not handled yet in FileOffsetScanner.ScanFile (however uncommented code is ready).
Pausing a scan will now pause FileOffsetScanners in-between parse attempts.
Other changes
Utils.ShowDialog has been moved to DialogForm.Show, to follow the same convention used by MessageBox.Show. The order of text/caption parameters has also been switched to match MessageBox.
Minor refactoring/cleanup in RootEntitySelectorEditor.
Rewrote some of the HMD debug output information, like changing primitive type to hex, because it's easier to read.
Fixed HMD developerId being parsed one bit too low (at 27 when it should be 28).
Fixed PreviewForm sometimes erroring while closing in the middle of the scan. A new field _closing is now set during the Closing event, and this is now checked together with IsDisposed before invoking functions that may be called by Program.
PreviewForm timers are now stopped during the Closing event.
Added menu item to stop current scan. When pressed, a message box will first ask the user to confirm they want to cancel.
When a scan is canceled or finishes, the Pause/Stop Scanning menu items will be unchecked/disabled.
The status text label is changed to "Scan Paused"/"Scan Resumed" when pressing the Pause Scanning menu item.
Command line options
Scanning changes
Func<FileOffsetScanner>
.Other changes