diff --git a/MPF.Library/Aaru/Constants.cs b/MPF.Library/Aaru/Constants.cs
index 1bd7fa8f..f38036c2 100644
--- a/MPF.Library/Aaru/Constants.cs
+++ b/MPF.Library/Aaru/Constants.cs
@@ -5,6 +5,8 @@ namespace MPF.Aaru
///
public static class CommandStrings
{
+ public const string NONE = "";
+
// Database Family
public const string DatabasePrefixShort = "db";
public const string DatabasePrefixLong = "database";
diff --git a/MPF.Library/Aaru/Converters.cs b/MPF.Library/Aaru/Converters.cs
index 83b5eb27..4587c4ce 100644
--- a/MPF.Library/Aaru/Converters.cs
+++ b/MPF.Library/Aaru/Converters.cs
@@ -18,407 +18,5 @@ namespace MPF.Aaru
}
#endregion
-
- #region Convert to Long Name
-
- ///
- /// Get the string representation of the Command enum values
- ///
- /// Command value to convert
- /// String representing the value, if possible
- public static string LongName(Command command)
- {
- switch (command)
- {
- // Database Family
- case Command.DatabaseStats:
- return $"{CommandStrings.DatabasePrefixLong} {CommandStrings.DatabaseStats}";
- case Command.DatabaseUpdate:
- return $"{CommandStrings.DatabasePrefixLong} {CommandStrings.DatabaseUpdate}";
-
- // Device Family
- case Command.DeviceInfo:
- return $"{CommandStrings.DevicePrefixLong} {CommandStrings.DeviceInfo}";
- case Command.DeviceList:
- return $"{CommandStrings.DevicePrefixLong} {CommandStrings.DeviceList}";
- case Command.DeviceReport:
- return $"{CommandStrings.DevicePrefixLong} {CommandStrings.DeviceReport}";
-
- // Filesystem Family
- case Command.FilesystemExtract:
- return $"{CommandStrings.FilesystemPrefixLong} {CommandStrings.FilesystemExtract}";
- case Command.FilesystemList:
- return $"{CommandStrings.FilesystemPrefixLong} {CommandStrings.FilesystemListLong}";
- case Command.FilesystemOptions:
- return $"{CommandStrings.FilesystemPrefixLong} {CommandStrings.FilesystemOptions}";
-
- // Image Family
- case Command.ImageAnalyze:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageAnalyze}";
- case Command.ImageChecksum:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageChecksumLong}";
- case Command.ImageCompare:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageCompareLong}";
- case Command.ImageConvert:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageConvert}";
- case Command.ImageCreateSidecar:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageCreateSidecar}";
- case Command.ImageDecode:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageDecode}";
- case Command.ImageEntropy:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageEntropy}";
- case Command.ImageInfo:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageInfo}";
- case Command.ImageOptions:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageOptions}";
- case Command.ImagePrint:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImagePrint}";
- case Command.ImageVerify:
- return $"{CommandStrings.ImagePrefixLong} {CommandStrings.ImageVerify}";
-
- // Media Family
- case Command.MediaDump:
- return $"{CommandStrings.MediaPrefixLong} {CommandStrings.MediaDump}";
- case Command.MediaInfo:
- return $"{CommandStrings.MediaPrefixLong} {CommandStrings.MediaInfo}";
- case Command.MediaScan:
- return $"{CommandStrings.MediaPrefixLong} {CommandStrings.MediaScan}";
-
- // Standalone Commands
- case Command.Configure:
- return CommandStrings.Configure;
- case Command.Formats:
- return CommandStrings.Formats;
- case Command.ListEncodings:
- return CommandStrings.ListEncodings;
- case Command.ListNamespaces:
- return CommandStrings.ListNamespaces;
- case Command.Remote:
- return CommandStrings.Remote;
-
- case Command.NONE:
- default:
- return "";
- }
- }
-
- ///
- /// Get the string representation of the Flag enum values
- ///
- /// Flag value to convert
- /// String representing the value, if possible
- public static string LongName(Flag flag)
- {
- switch (flag)
- {
- // Boolean flags
- case Flag.Adler32:
- return FlagStrings.Adler32Long;
- case Flag.Clear:
- return FlagStrings.ClearLong;
- case Flag.ClearAll:
- return FlagStrings.ClearAllLong;
- case Flag.CRC16:
- return FlagStrings.CRC16Long;
- case Flag.CRC32:
- return FlagStrings.CRC32Long;
- case Flag.CRC64:
- return FlagStrings.CRC64Long;
- case Flag.Debug:
- return FlagStrings.DebugLong;
- case Flag.DiskTags:
- return FlagStrings.DiskTagsLong;
- case Flag.DuplicatedSectors:
- return FlagStrings.DuplicatedSectorsLong;
- case Flag.Eject:
- return FlagStrings.EjectLong;
- case Flag.ExtendedAttributes:
- return FlagStrings.ExtendedAttributesLong;
- case Flag.Filesystems:
- return FlagStrings.FilesystemsLong;
- case Flag.FirstPregap:
- return FlagStrings.FirstPregapLong;
- case Flag.FixOffset:
- return FlagStrings.FixOffsetLong;
- case Flag.FixSubchannel:
- return FlagStrings.FixSubchannelLong;
- case Flag.FixSubchannelCrc:
- return FlagStrings.FixSubchannelCrcLong;
- case Flag.FixSubchannelPosition:
- return FlagStrings.FixSubchannelPositionLong;
- case Flag.Fletcher16:
- return FlagStrings.Fletcher16Long;
- case Flag.Fletcher32:
- return FlagStrings.Fletcher32Long;
- case Flag.Force:
- return FlagStrings.ForceLong;
- case Flag.GenerateSubchannels:
- return FlagStrings.GenerateSubchannelsLong;
- case Flag.Help:
- return FlagStrings.HelpLong;
- case Flag.LongFormat:
- return FlagStrings.LongFormatLong;
- case Flag.LongSectors:
- return FlagStrings.LongSectorsLong;
- case Flag.MD5:
- return FlagStrings.MD5Long;
- case Flag.Metadata:
- return FlagStrings.MetadataLong;
- case Flag.Partitions:
- return FlagStrings.PartitionsLong;
- case Flag.Persistent:
- return FlagStrings.PersistentLong;
- case Flag.Private:
- return FlagStrings.PrivateLong;
- case Flag.Resume:
- return FlagStrings.ResumeLong;
- case Flag.RetrySubchannel:
- return FlagStrings.RetrySubchannelLong;
- case Flag.SectorTags:
- return FlagStrings.SectorTagsLong;
- case Flag.SeparatedTracks:
- return FlagStrings.SeparatedTracksLong;
- case Flag.SHA1:
- return FlagStrings.SHA1Long;
- case Flag.SHA256:
- return FlagStrings.SHA256Long;
- case Flag.SHA384:
- return FlagStrings.SHA384Long;
- case Flag.SHA512:
- return FlagStrings.SHA512Long;
- case Flag.SkipCdiReadyHole:
- return FlagStrings.SkipCdiReadyHoleLong;
- case Flag.SpamSum:
- return FlagStrings.SpamSumLong;
- case Flag.StopOnError:
- return FlagStrings.StopOnErrorLong;
- case Flag.Tape:
- return FlagStrings.TapeLong;
- case Flag.Trim:
- return FlagStrings.TrimLong;
- case Flag.Verbose:
- return FlagStrings.VerboseLong;
- case Flag.VerifyDisc:
- return FlagStrings.VerifyDiscLong;
- case Flag.VerifySectors:
- return FlagStrings.VerifySectorsLong;
- case Flag.Version:
- return FlagStrings.VersionLong;
- case Flag.WholeDisc:
- return FlagStrings.WholeDiscLong;
-
- // Int8 flags
- case Flag.Speed:
- return FlagStrings.SpeedLong;
-
- // Int16 flags
- case Flag.RetryPasses:
- return FlagStrings.RetryPassesLong;
- case Flag.Width:
- return FlagStrings.WidthLong;
-
- // Int32 flags
- case Flag.BlockSize:
- return FlagStrings.BlockSizeLong;
- case Flag.Count:
- return FlagStrings.CountLong;
- case Flag.MediaLastSequence:
- return FlagStrings.MediaLastSequenceLong;
- case Flag.MediaSequence:
- return FlagStrings.MediaSequenceLong;
- case Flag.Skip:
- return FlagStrings.SkipLong;
-
- // Int64 flags
- case Flag.Length:
- return FlagStrings.LengthLong;
- case Flag.Start:
- return FlagStrings.StartLong;
-
- // String flags
- case Flag.Comments:
- return FlagStrings.CommentsLong;
- case Flag.Creator:
- return FlagStrings.CreatorLong;
- case Flag.DriveManufacturer:
- return FlagStrings.DriveManufacturerLong;
- case Flag.DriveModel:
- return FlagStrings.DriveModelLong;
- case Flag.DriveRevision:
- return FlagStrings.DriveRevisionLong;
- case Flag.DriveSerial:
- return FlagStrings.DriveSerialLong;
- case Flag.Encoding:
- return FlagStrings.EncodingLong;
- case Flag.FormatConvert:
- return FlagStrings.FormatConvertLong;
- case Flag.FormatDump:
- return FlagStrings.FormatDumpLong;
- case Flag.ImgBurnLog:
- return FlagStrings.ImgBurnLogLong;
- case Flag.MediaBarcode:
- return FlagStrings.MediaBarcodeLong;
- case Flag.MediaManufacturer:
- return FlagStrings.MediaManufacturerLong;
- case Flag.MediaModel:
- return FlagStrings.MediaModelLong;
- case Flag.MediaPartNumber:
- return FlagStrings.MediaPartNumberLong;
- case Flag.MediaSerial:
- return FlagStrings.MediaSerialLong;
- case Flag.MediaTitle:
- return FlagStrings.MediaTitleLong;
- case Flag.MHDDLog:
- return FlagStrings.MHDDLogLong;
- case Flag.Namespace:
- return FlagStrings.NamespaceLong;
- case Flag.Options:
- return FlagStrings.OptionsLong;
- case Flag.OutputPrefix:
- return FlagStrings.OutputPrefixLong;
- case Flag.ResumeFile:
- return FlagStrings.ResumeFileLong;
- case Flag.Subchannel:
- return FlagStrings.SubchannelLong;
- case Flag.XMLSidecar:
- return FlagStrings.XMLSidecarLong;
-
- case Flag.NONE:
- default:
- return "";
- }
- }
-
- #endregion
-
- #region Convert From String
-
- ///
- /// Get the Command enum value for a given string
- ///
- /// First part of String value to convert
- /// Second part of String value to convert
- /// Output bool if the second command was used
- /// Command represented by the string(s), if possible
- public static Command StringToCommand(string commandOne, string commandTwo, out bool useSecond)
- {
- useSecond = false;
- switch (commandOne)
- {
- // Database Family
- case CommandStrings.DatabasePrefixShort:
- case CommandStrings.DatabasePrefixLong:
- useSecond = true;
- switch (commandTwo)
- {
- case CommandStrings.DatabaseStats:
- return Command.DatabaseStats;
- case CommandStrings.DatabaseUpdate:
- return Command.DatabaseUpdate;
- }
-
- break;
-
- // Device Family
- case CommandStrings.DevicePrefixShort:
- case CommandStrings.DevicePrefixLong:
- useSecond = true;
- switch (commandTwo)
- {
- case CommandStrings.DeviceInfo:
- return Command.DeviceInfo;
- case CommandStrings.DeviceList:
- return Command.DeviceList;
- case CommandStrings.DeviceReport:
- return Command.DeviceReport;
- }
-
- break;
-
- // Filesystem Family
- case CommandStrings.FilesystemPrefixShort:
- case CommandStrings.FilesystemPrefixShortAlt:
- case CommandStrings.FilesystemPrefixLong:
- useSecond = true;
- switch (commandTwo)
- {
- case CommandStrings.FilesystemExtract:
- return Command.FilesystemExtract;
- case CommandStrings.FilesystemListShort:
- case CommandStrings.FilesystemListLong:
- return Command.FilesystemList;
- case CommandStrings.DatabaseStats:
- return Command.FilesystemOptions;
- }
-
- break;
-
- // Image Family
- case CommandStrings.ImagePrefixShort:
- case CommandStrings.ImagePrefixLong:
- useSecond = true;
- switch (commandTwo)
- {
- case CommandStrings.ImageAnalyze:
- return Command.ImageAnalyze;
- case CommandStrings.ImageChecksumShort:
- case CommandStrings.ImageChecksumLong:
- return Command.ImageChecksum;
- case CommandStrings.ImageCompareShort:
- case CommandStrings.ImageCompareLong:
- return Command.ImageCompare;
- case CommandStrings.ImageConvert:
- return Command.ImageConvert;
- case CommandStrings.ImageCreateSidecar:
- return Command.ImageCreateSidecar;
- case CommandStrings.ImageDecode:
- return Command.ImageDecode;
- case CommandStrings.ImageEntropy:
- return Command.ImageEntropy;
- case CommandStrings.ImageInfo:
- return Command.ImageInfo;
- case CommandStrings.ImageOptions:
- return Command.ImageOptions;
- case CommandStrings.ImagePrint:
- return Command.ImagePrint;
- case CommandStrings.ImageVerify:
- return Command.ImageVerify;
- }
-
- break;
-
- // Media Family
- case CommandStrings.MediaPrefixShort:
- case CommandStrings.MediaPrefixLong:
- useSecond = true;
- switch (commandTwo)
- {
- case CommandStrings.MediaDump:
- return Command.MediaDump;
- case CommandStrings.MediaInfo:
- return Command.MediaInfo;
- case CommandStrings.MediaScan:
- return Command.MediaScan;
- }
-
- break;
-
- // Standalone Commands
- case CommandStrings.Configure:
- return Command.Configure;
- case CommandStrings.Formats:
- return Command.Formats;
- case CommandStrings.ListEncodings:
- return Command.ListEncodings;
- case CommandStrings.ListNamespaces:
- return Command.ListNamespaces;
- case CommandStrings.Remote:
- return Command.Remote;
- }
-
- return Command.NONE;
- }
-
- #endregion
}
}
diff --git a/MPF.Library/Aaru/Enumerations.cs b/MPF.Library/Aaru/Enumerations.cs
deleted file mode 100644
index ac70e975..00000000
--- a/MPF.Library/Aaru/Enumerations.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-namespace MPF.Aaru
-{
- ///
- /// Supported Aaru commands
- ///
- public enum Command : int
- {
- NONE = 0,
-
- // Database Family
- DatabaseStats,
- DatabaseUpdate,
-
- // Device Family
- DeviceInfo,
- DeviceList,
- DeviceReport,
-
- // Filesystem Family
- FilesystemExtract,
- FilesystemList,
- FilesystemOptions,
-
- // Image Family
- ImageAnalyze,
- ImageChecksum,
- ImageCompare,
- ImageConvert,
- ImageCreateSidecar,
- ImageDecode,
- ImageEntropy,
- ImageInfo,
- ImageOptions,
- ImagePrint,
- ImageVerify,
-
- // Media Family
- MediaDump,
- MediaInfo,
- MediaScan,
-
- // Standalone Commands
- Configure,
- Formats,
- ListEncodings,
- ListNamespaces,
- Remote,
- }
-
- ///
- /// Supported Aaru flags
- ///
- public enum Flag : int
- {
- NONE = 0,
-
- // Boolean flags
- Adler32,
- Clear,
- ClearAll,
- CRC16,
- CRC32,
- CRC64,
- Debug,
- DiskTags,
- DuplicatedSectors,
- Eject,
- ExtendedAttributes,
- Filesystems,
- FirstPregap,
- FixOffset,
- FixSubchannel,
- FixSubchannelCrc,
- FixSubchannelPosition,
- Fletcher16,
- Fletcher32,
- Force,
- GenerateSubchannels,
- Help,
- LongFormat,
- LongSectors,
- MD5,
- Metadata,
- Partitions,
- Persistent,
- Private,
- Resume,
- RetrySubchannel,
- SectorTags,
- SeparatedTracks,
- SHA1,
- SHA256,
- SHA384,
- SHA512,
- SkipCdiReadyHole,
- SpamSum,
- StopOnError,
- Tape,
- Trim,
- Verbose,
- VerifyDisc,
- VerifySectors,
- Version,
- WholeDisc,
-
- // Int8 flags
- Speed,
-
- // Int16 flags
- RetryPasses,
- Width,
-
- // Int32 flags
- BlockSize,
- Count,
- MediaLastSequence,
- MediaSequence,
- Skip,
-
- // Int64 flags
- Length,
- Start,
-
- // String flags
- Comments,
- Creator,
- DriveManufacturer,
- DriveModel,
- DriveRevision,
- DriveSerial,
- Encoding,
- FormatConvert,
- FormatDump,
- ImgBurnLog,
- MediaBarcode,
- MediaManufacturer,
- MediaModel,
- MediaPartNumber,
- MediaSerial,
- MediaTitle,
- MHDDLog,
- Namespace,
- Options,
- OutputPrefix,
- ResumeFile,
- Subchannel,
- XMLSidecar,
- }
-}
\ No newline at end of file
diff --git a/MPF.Library/Aaru/Parameters.cs b/MPF.Library/Aaru/Parameters.cs
index aeb6887c..7e7beae2 100644
--- a/MPF.Library/Aaru/Parameters.cs
+++ b/MPF.Library/Aaru/Parameters.cs
@@ -38,36 +38,11 @@ namespace MPF.Aaru
#region Metadata
- ///
- /// Base command to run
- ///
- public Command BaseCommand { get; set; }
-
///
public override InternalProgram InternalProgram => InternalProgram.Aaru;
#endregion
- ///
- /// Set of flags to pass to the executable
- ///
- protected Dictionary _flags = new Dictionary();
- public bool? this[Flag key]
- {
- get
- {
- if (_flags.ContainsKey(key))
- return _flags[key];
-
- return null;
- }
- set
- {
- _flags[key] = value;
- }
- }
- protected internal IEnumerable Keys => _flags.Keys;
-
#region Flag Values
public int? BlockSizeValue { get; set; }
@@ -391,329 +366,332 @@ namespace MPF.Aaru
#region Pre-command flags
// Debug
- if (this[Flag.Debug] == true)
- parameters.Add(Converters.LongName(Flag.Debug));
+ if (this[FlagStrings.DebugLong] == true)
+ parameters.Add(FlagStrings.DebugLong);
// Verbose
- if (this[Flag.Verbose] == true)
- parameters.Add(Converters.LongName(Flag.Verbose));
+ if (this[FlagStrings.VerboseLong] == true)
+ parameters.Add(FlagStrings.VerboseLong);
// Version
- if (this[Flag.Version] == true)
- parameters.Add(Converters.LongName(Flag.Version));
+ if (this[FlagStrings.VersionLong] == true)
+ parameters.Add(FlagStrings.VersionLong);
// Help
- if (this[Flag.Help] == true)
- parameters.Add(Converters.LongName(Flag.Version));
+ if (this[FlagStrings.HelpLong] == true)
+ parameters.Add(FlagStrings.VersionLong);
#endregion
- if (BaseCommand != Command.NONE)
- parameters.Add(Converters.LongName(BaseCommand));
+ if (BaseCommand == null)
+ BaseCommand = CommandStrings.NONE;
+
+ if (!string.IsNullOrWhiteSpace(BaseCommand))
+ parameters.Add(BaseCommand);
else
return null;
#region Boolean flags
// Adler-32
- if (GetSupportedCommands(Flag.Adler32).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Adler32Long))
{
- if (this[Flag.Adler32] == true)
- parameters.Add(Converters.LongName(Flag.Adler32));
+ if (this[FlagStrings.Adler32Long] == true)
+ parameters.Add(FlagStrings.Adler32Long);
}
// Clear
- if (GetSupportedCommands(Flag.Clear).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ClearLong))
{
- if (this[Flag.Clear] == true)
- parameters.Add(Converters.LongName(Flag.Clear));
+ if (this[FlagStrings.ClearLong] == true)
+ parameters.Add(FlagStrings.ClearLong);
}
// Clear All
- if (GetSupportedCommands(Flag.ClearAll).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ClearAllLong))
{
- if (this[Flag.ClearAll] == true)
- parameters.Add(Converters.LongName(Flag.ClearAll));
+ if (this[FlagStrings.ClearAllLong] == true)
+ parameters.Add(FlagStrings.ClearAllLong);
}
// CRC16
- if (GetSupportedCommands(Flag.CRC16).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CRC16Long))
{
- if (this[Flag.CRC16] == true)
- parameters.Add(Converters.LongName(Flag.CRC16));
+ if (this[FlagStrings.CRC16Long] == true)
+ parameters.Add(FlagStrings.CRC16Long);
}
// CRC32
- if (GetSupportedCommands(Flag.CRC32).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CRC32Long))
{
- if (this[Flag.CRC32] == true)
- parameters.Add(Converters.LongName(Flag.CRC32));
+ if (this[FlagStrings.CRC32Long] == true)
+ parameters.Add(FlagStrings.CRC32Long);
}
// CRC64
- if (GetSupportedCommands(Flag.CRC64).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CRC64Long))
{
- if (this[Flag.CRC64] == true)
- parameters.Add(Converters.LongName(Flag.CRC64));
+ if (this[FlagStrings.CRC64Long] == true)
+ parameters.Add(FlagStrings.CRC64Long);
}
// Disk Tags
- if (GetSupportedCommands(Flag.DiskTags).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DiskTagsLong))
{
- if (this[Flag.DiskTags] == true)
- parameters.Add(Converters.LongName(Flag.DiskTags));
+ if (this[FlagStrings.DiskTagsLong] == true)
+ parameters.Add(FlagStrings.DiskTagsLong);
}
// Duplicated Sectors
- if (GetSupportedCommands(Flag.DuplicatedSectors).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DuplicatedSectorsLong))
{
- if (this[Flag.DuplicatedSectors] == true)
- parameters.Add(Converters.LongName(Flag.DuplicatedSectors));
+ if (this[FlagStrings.DuplicatedSectorsLong] == true)
+ parameters.Add(FlagStrings.DuplicatedSectorsLong);
}
// Eject
- if (GetSupportedCommands(Flag.Eject).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.EjectLong))
{
- if (this[Flag.Eject] == true)
- parameters.Add(Converters.LongName(Flag.Eject));
+ if (this[FlagStrings.EjectLong] == true)
+ parameters.Add(FlagStrings.EjectLong);
}
// Extended Attributes
- if (GetSupportedCommands(Flag.ExtendedAttributes).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ExtendedAttributesLong))
{
- if (this[Flag.ExtendedAttributes] == true)
- parameters.Add(Converters.LongName(Flag.ExtendedAttributes));
+ if (this[FlagStrings.ExtendedAttributesLong] == true)
+ parameters.Add(FlagStrings.ExtendedAttributesLong);
}
// Filesystems
- if (GetSupportedCommands(Flag.Filesystems).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FilesystemsLong))
{
- if (this[Flag.Filesystems] == true)
- parameters.Add(Converters.LongName(Flag.Filesystems));
+ if (this[FlagStrings.FilesystemsLong] == true)
+ parameters.Add(FlagStrings.FilesystemsLong);
}
// First Pregap
- if (GetSupportedCommands(Flag.FirstPregap).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FirstPregapLong))
{
- if (this[Flag.FirstPregap] == true)
- parameters.Add(Converters.LongName(Flag.FirstPregap));
+ if (this[FlagStrings.FirstPregapLong] == true)
+ parameters.Add(FlagStrings.FirstPregapLong);
}
// Fix Offset
- if (GetSupportedCommands(Flag.FixOffset).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FixOffsetLong))
{
- if (this[Flag.FixOffset] == true)
- parameters.Add(Converters.LongName(Flag.FixOffset));
+ if (this[FlagStrings.FixOffsetLong] == true)
+ parameters.Add(FlagStrings.FixOffsetLong);
}
// Fix Subchannel
- if (GetSupportedCommands(Flag.FixSubchannel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FixSubchannelLong))
{
- if (this[Flag.FixSubchannel] == true)
- parameters.Add(Converters.LongName(Flag.FixSubchannel));
+ if (this[FlagStrings.FixSubchannelLong] == true)
+ parameters.Add(FlagStrings.FixSubchannelLong);
}
// Fix Subchannel CRC
- if (GetSupportedCommands(Flag.FixSubchannelCrc).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FixSubchannelCrcLong))
{
- if (this[Flag.FixSubchannelCrc] == true)
- parameters.Add(Converters.LongName(Flag.FixSubchannelCrc));
+ if (this[FlagStrings.FixSubchannelCrcLong] == true)
+ parameters.Add(FlagStrings.FixSubchannelCrcLong);
}
// Fix Subchannel Position
- if (GetSupportedCommands(Flag.FixSubchannelPosition).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FixSubchannelPositionLong))
{
- if (this[Flag.FixSubchannelPosition] == true)
- parameters.Add(Converters.LongName(Flag.FixSubchannelPosition));
+ if (this[FlagStrings.FixSubchannelPositionLong] == true)
+ parameters.Add(FlagStrings.FixSubchannelPositionLong);
}
// Fletcher-16
- if (GetSupportedCommands(Flag.Fletcher16).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Fletcher16Long))
{
- if (this[Flag.Fletcher16] == true)
- parameters.Add(Converters.LongName(Flag.Fletcher16));
+ if (this[FlagStrings.Fletcher16Long] == true)
+ parameters.Add(FlagStrings.Fletcher16Long);
}
// Fletcher-32
- if (GetSupportedCommands(Flag.Fletcher32).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Fletcher32Long))
{
- if (this[Flag.Fletcher32] == true)
- parameters.Add(Converters.LongName(Flag.Fletcher32));
+ if (this[FlagStrings.Fletcher32Long] == true)
+ parameters.Add(FlagStrings.Fletcher32Long);
}
// Force
- if (GetSupportedCommands(Flag.Force).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ForceLong))
{
- if (this[Flag.Force] == true)
- parameters.Add(Converters.LongName(Flag.Force));
+ if (this[FlagStrings.ForceLong] == true)
+ parameters.Add(FlagStrings.ForceLong);
}
// Generate Subchannels
- if (GetSupportedCommands(Flag.GenerateSubchannels).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.GenerateSubchannelsLong))
{
- if (this[Flag.GenerateSubchannels] == true)
- parameters.Add(Converters.LongName(Flag.GenerateSubchannels));
+ if (this[FlagStrings.GenerateSubchannelsLong] == true)
+ parameters.Add(FlagStrings.GenerateSubchannelsLong);
}
// Long Format
- if (GetSupportedCommands(Flag.LongFormat).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.LongFormatLong))
{
- if (this[Flag.LongFormat] == true)
- parameters.Add(Converters.LongName(Flag.LongFormat));
+ if (this[FlagStrings.LongFormatLong] == true)
+ parameters.Add(FlagStrings.LongFormatLong);
}
// Long Sectors
- if (GetSupportedCommands(Flag.LongSectors).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.LongSectorsLong))
{
- if (this[Flag.LongSectors] == true)
- parameters.Add(Converters.LongName(Flag.LongSectors));
+ if (this[FlagStrings.LongSectorsLong] == true)
+ parameters.Add(FlagStrings.LongSectorsLong);
}
// MD5
- if (GetSupportedCommands(Flag.MD5).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MD5Long))
{
- if (this[Flag.MD5] == true)
- parameters.Add(Converters.LongName(Flag.MD5));
+ if (this[FlagStrings.MD5Long] == true)
+ parameters.Add(FlagStrings.MD5Long);
}
// Metadata
- if (GetSupportedCommands(Flag.Metadata).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MetadataLong))
{
- if (this[Flag.Metadata] == true)
- parameters.Add(Converters.LongName(Flag.Metadata));
+ if (this[FlagStrings.MetadataLong] == true)
+ parameters.Add(FlagStrings.MetadataLong);
}
// Partitions
- if (GetSupportedCommands(Flag.Partitions).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.PartitionsLong))
{
- if (this[Flag.Partitions] == true)
- parameters.Add(Converters.LongName(Flag.Partitions));
+ if (this[FlagStrings.PartitionsLong] == true)
+ parameters.Add(FlagStrings.PartitionsLong);
}
// Persistent
- if (GetSupportedCommands(Flag.Persistent).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.PersistentLong))
{
- if (this[Flag.Persistent] == true)
- parameters.Add(Converters.LongName(Flag.Persistent));
+ if (this[FlagStrings.PersistentLong] == true)
+ parameters.Add(FlagStrings.PersistentLong);
}
// Private
- if (GetSupportedCommands(Flag.Private).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.PrivateLong))
{
- if (this[Flag.Private] == true)
- parameters.Add(Converters.LongName(Flag.Private));
+ if (this[FlagStrings.PrivateLong] == true)
+ parameters.Add(FlagStrings.PrivateLong);
}
// Resume
- if (GetSupportedCommands(Flag.Resume).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ResumeLong))
{
- if (this[Flag.Resume] == true)
- parameters.Add(Converters.LongName(Flag.Resume));
+ if (this[FlagStrings.ResumeLong] == true)
+ parameters.Add(FlagStrings.ResumeLong);
}
// Retry Subchannel
- if (GetSupportedCommands(Flag.RetrySubchannel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.RetrySubchannelLong))
{
- if (this[Flag.RetrySubchannel] == true)
- parameters.Add(Converters.LongName(Flag.RetrySubchannel));
+ if (this[FlagStrings.RetrySubchannelLong] == true)
+ parameters.Add(FlagStrings.RetrySubchannelLong);
}
// Sector Tags
- if (GetSupportedCommands(Flag.SectorTags).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SectorTagsLong))
{
- if (this[Flag.SectorTags] == true)
- parameters.Add(Converters.LongName(Flag.SectorTags));
+ if (this[FlagStrings.SectorTagsLong] == true)
+ parameters.Add(FlagStrings.SectorTagsLong);
}
// Separated Tracks
- if (GetSupportedCommands(Flag.SeparatedTracks).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SeparatedTracksLong))
{
- if (this[Flag.SeparatedTracks] == true)
- parameters.Add(Converters.LongName(Flag.SeparatedTracks));
+ if (this[FlagStrings.SeparatedTracksLong] == true)
+ parameters.Add(FlagStrings.SeparatedTracksLong);
}
// SHA-1
- if (GetSupportedCommands(Flag.SHA1).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SHA1Long))
{
- if (this[Flag.SHA1] == true)
- parameters.Add(Converters.LongName(Flag.SHA1));
+ if (this[FlagStrings.SHA1Long] == true)
+ parameters.Add(FlagStrings.SHA1Long);
}
// SHA-256
- if (GetSupportedCommands(Flag.SHA256).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SHA256Long))
{
- if (this[Flag.SHA256] == true)
- parameters.Add(Converters.LongName(Flag.SHA256));
+ if (this[FlagStrings.SHA256Long] == true)
+ parameters.Add(FlagStrings.SHA256Long);
}
// SHA-384
- if (GetSupportedCommands(Flag.SHA384).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SHA384Long))
{
- if (this[Flag.SHA384] == true)
- parameters.Add(Converters.LongName(Flag.SHA384));
+ if (this[FlagStrings.SHA384Long] == true)
+ parameters.Add(FlagStrings.SHA384Long);
}
// SHA-512
- if (GetSupportedCommands(Flag.SHA512).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SHA512Long))
{
- if (this[Flag.SHA512] == true)
- parameters.Add(Converters.LongName(Flag.SHA512));
+ if (this[FlagStrings.SHA512Long] == true)
+ parameters.Add(FlagStrings.SHA512Long);
}
// Skip CD-i Ready Hole
- if (GetSupportedCommands(Flag.SkipCdiReadyHole).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SkipCdiReadyHoleLong))
{
- if (this[Flag.SkipCdiReadyHole] == true)
- parameters.Add(Converters.LongName(Flag.SkipCdiReadyHole));
+ if (this[FlagStrings.SkipCdiReadyHoleLong] == true)
+ parameters.Add(FlagStrings.SkipCdiReadyHoleLong);
}
// SpamSum
- if (GetSupportedCommands(Flag.SpamSum).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SpamSumLong))
{
- if (this[Flag.SpamSum] == true)
- parameters.Add(Converters.LongName(Flag.SpamSum));
+ if (this[FlagStrings.SpamSumLong] == true)
+ parameters.Add(FlagStrings.SpamSumLong);
}
// Stop on Error
- if (GetSupportedCommands(Flag.StopOnError).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.StopOnErrorLong))
{
- if (this[Flag.StopOnError] == true)
- parameters.Add(Converters.LongName(Flag.StopOnError));
+ if (this[FlagStrings.StopOnErrorLong] == true)
+ parameters.Add(FlagStrings.StopOnErrorLong);
}
// Tape
- if (GetSupportedCommands(Flag.Tape).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.TapeLong))
{
- if (this[Flag.Tape] == true)
- parameters.Add(Converters.LongName(Flag.Tape));
+ if (this[FlagStrings.TapeLong] == true)
+ parameters.Add(FlagStrings.TapeLong);
}
// Trim
- if (GetSupportedCommands(Flag.Trim).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.TrimLong))
{
- if (this[Flag.Trim] == true)
- parameters.Add(Converters.LongName(Flag.Trim));
+ if (this[FlagStrings.TrimLong] == true)
+ parameters.Add(FlagStrings.TrimLong);
}
// Verify Disc
- if (GetSupportedCommands(Flag.VerifyDisc).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.VerifyDiscLong))
{
- if (this[Flag.VerifyDisc] == true)
- parameters.Add(Converters.LongName(Flag.VerifyDisc));
+ if (this[FlagStrings.VerifyDiscLong] == true)
+ parameters.Add(FlagStrings.VerifyDiscLong);
}
// Verify Sectors
- if (GetSupportedCommands(Flag.VerifySectors).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.VerifySectorsLong))
{
- if (this[Flag.VerifySectors] == true)
- parameters.Add(Converters.LongName(Flag.VerifySectors));
+ if (this[FlagStrings.VerifySectorsLong] == true)
+ parameters.Add(FlagStrings.VerifySectorsLong);
}
// Whole Disc
- if (GetSupportedCommands(Flag.WholeDisc).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.WholeDiscLong))
{
- if (this[Flag.WholeDisc] == true)
- parameters.Add(Converters.LongName(Flag.WholeDisc));
+ if (this[FlagStrings.WholeDiscLong] == true)
+ parameters.Add(FlagStrings.WholeDiscLong);
}
#endregion
@@ -721,10 +699,10 @@ namespace MPF.Aaru
#region Int8 flags
// Speed
- if (GetSupportedCommands(Flag.Speed).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SpeedLong))
{
- if (this[Flag.Speed] == true && SpeedValue != null)
- parameters.Add($"{Converters.LongName(Flag.Speed)} {SpeedValue}");
+ if (this[FlagStrings.SpeedLong] == true && SpeedValue != null)
+ parameters.Add($"{FlagStrings.SpeedLong} {SpeedValue}");
}
#endregion
@@ -732,17 +710,17 @@ namespace MPF.Aaru
#region Int16 flags
// Retry Passes
- if (GetSupportedCommands(Flag.RetryPasses).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.RetryPassesLong))
{
- if (this[Flag.RetryPasses] == true && RetryPassesValue != null)
- parameters.Add($"{Converters.LongName(Flag.RetryPasses)} {RetryPassesValue}");
+ if (this[FlagStrings.RetryPassesLong] == true && RetryPassesValue != null)
+ parameters.Add($"{FlagStrings.RetryPassesLong} {RetryPassesValue}");
}
// Width
- if (GetSupportedCommands(Flag.Width).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.WidthLong))
{
- if (this[Flag.Width] == true && WidthValue != null)
- parameters.Add($"{Converters.LongName(Flag.Width)} {WidthValue}");
+ if (this[FlagStrings.WidthLong] == true && WidthValue != null)
+ parameters.Add($"{FlagStrings.WidthLong} {WidthValue}");
}
#endregion
@@ -750,38 +728,38 @@ namespace MPF.Aaru
#region Int32 flags
// Block Size
- if (GetSupportedCommands(Flag.BlockSize).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.BlockSizeLong))
{
- if (this[Flag.BlockSize] == true && BlockSizeValue != null)
- parameters.Add($"{Converters.LongName(Flag.BlockSize)} {BlockSizeValue}");
+ if (this[FlagStrings.BlockSizeLong] == true && BlockSizeValue != null)
+ parameters.Add($"{FlagStrings.BlockSizeLong} {BlockSizeValue}");
}
// Count
- if (GetSupportedCommands(Flag.Count).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CountLong))
{
- if (this[Flag.Count] == true && CountValue != null)
- parameters.Add($"{Converters.LongName(Flag.Count)} {CountValue}");
+ if (this[FlagStrings.CountLong] == true && CountValue != null)
+ parameters.Add($"{FlagStrings.CountLong} {CountValue}");
}
// Media Last Sequence
- if (GetSupportedCommands(Flag.MediaLastSequence).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaLastSequenceLong))
{
- if (this[Flag.MediaLastSequence] == true && MediaLastSequenceValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaLastSequence)} {MediaLastSequenceValue}");
+ if (this[FlagStrings.MediaLastSequenceLong] == true && MediaLastSequenceValue != null)
+ parameters.Add($"{FlagStrings.MediaLastSequenceLong} {MediaLastSequenceValue}");
}
// Media Sequence
- if (GetSupportedCommands(Flag.MediaSequence).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaSequenceLong))
{
- if (this[Flag.MediaSequence] == true && MediaSequenceValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaSequence)} {MediaSequenceValue}");
+ if (this[FlagStrings.MediaSequenceLong] == true && MediaSequenceValue != null)
+ parameters.Add($"{FlagStrings.MediaSequenceLong} {MediaSequenceValue}");
}
// Skip
- if (GetSupportedCommands(Flag.Skip).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SkipLong))
{
- if (this[Flag.Skip] == true && SkipValue != null)
- parameters.Add($"{Converters.LongName(Flag.Skip)} {SkipValue}");
+ if (this[FlagStrings.SkipLong] == true && SkipValue != null)
+ parameters.Add($"{FlagStrings.SkipLong} {SkipValue}");
}
#endregion
@@ -789,22 +767,22 @@ namespace MPF.Aaru
#region Int64 flags
// Length
- if (GetSupportedCommands(Flag.Length).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.LengthLong))
{
- if (this[Flag.Length] == true && LengthValue != null)
+ if (this[FlagStrings.LengthLong] == true && LengthValue != null)
{
if (LengthValue >= 0)
- parameters.Add($"{Converters.LongName(Flag.Length)} {LengthValue}");
- else if (LengthValue == -1 && BaseCommand == Command.ImageDecode)
- parameters.Add($"{Converters.LongName(Flag.Length)} all");
+ parameters.Add($"{FlagStrings.LengthLong} {LengthValue}");
+ else if (LengthValue == -1 && BaseCommand == CommandStrings.ImageDecode)
+ parameters.Add($"{FlagStrings.LengthLong} all");
}
}
// Start
- if (GetSupportedCommands(Flag.Start).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.StartLong))
{
- if (this[Flag.Start] == true && StartValue != null)
- parameters.Add($"{Converters.LongName(Flag.Start)} {StartValue}");
+ if (this[FlagStrings.StartLong] == true && StartValue != null)
+ parameters.Add($"{FlagStrings.StartLong} {StartValue}");
}
#endregion
@@ -812,164 +790,164 @@ namespace MPF.Aaru
#region String flags
// Comments
- if (GetSupportedCommands(Flag.Comments).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CommentsLong))
{
- if (this[Flag.Comments] == true && CommentsValue != null)
- parameters.Add($"{Converters.LongName(Flag.Comments)} \"{CommentsValue}\"");
+ if (this[FlagStrings.CommentsLong] == true && CommentsValue != null)
+ parameters.Add($"{FlagStrings.CommentsLong} \"{CommentsValue}\"");
}
// Creator
- if (GetSupportedCommands(Flag.Creator).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CreatorLong))
{
- if (this[Flag.Creator] == true && CreatorValue != null)
- parameters.Add($"{Converters.LongName(Flag.Creator)} \"{CreatorValue}\"");
+ if (this[FlagStrings.CreatorLong] == true && CreatorValue != null)
+ parameters.Add($"{FlagStrings.CreatorLong} \"{CreatorValue}\"");
}
// Drive Manufacturer
- if (GetSupportedCommands(Flag.DriveManufacturer).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DriveManufacturerLong))
{
- if (this[Flag.DriveManufacturer] == true && DriveManufacturerValue != null)
- parameters.Add($"{Converters.LongName(Flag.DriveManufacturer)} \"{DriveManufacturerValue}\"");
+ if (this[FlagStrings.DriveManufacturerLong] == true && DriveManufacturerValue != null)
+ parameters.Add($"{FlagStrings.DriveManufacturerLong} \"{DriveManufacturerValue}\"");
}
// Drive Model
- if (GetSupportedCommands(Flag.DriveModel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DriveModelLong))
{
- if (this[Flag.DriveModel] == true && DriveModelValue != null)
- parameters.Add($"{Converters.LongName(Flag.DriveModel)} \"{DriveModelValue}\"");
+ if (this[FlagStrings.DriveModelLong] == true && DriveModelValue != null)
+ parameters.Add($"{FlagStrings.DriveModelLong} \"{DriveModelValue}\"");
}
// Drive Revision
- if (GetSupportedCommands(Flag.DriveRevision).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DriveRevisionLong))
{
- if (this[Flag.DriveRevision] == true && DriveRevisionValue != null)
- parameters.Add($"{Converters.LongName(Flag.DriveRevision)} \"{DriveRevisionValue}\"");
+ if (this[FlagStrings.DriveRevisionLong] == true && DriveRevisionValue != null)
+ parameters.Add($"{FlagStrings.DriveRevisionLong} \"{DriveRevisionValue}\"");
}
// Drive Serial
- if (GetSupportedCommands(Flag.DriveSerial).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DriveSerialLong))
{
- if (this[Flag.DriveSerial] == true && DriveSerialValue != null)
- parameters.Add($"{Converters.LongName(Flag.DriveSerial)} \"{DriveSerialValue}\"");
+ if (this[FlagStrings.DriveSerialLong] == true && DriveSerialValue != null)
+ parameters.Add($"{FlagStrings.DriveSerialLong} \"{DriveSerialValue}\"");
}
// Encoding
- if (GetSupportedCommands(Flag.Encoding).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.EncodingLong))
{
- if (this[Flag.Encoding] == true && EncodingValue != null)
- parameters.Add($"{Converters.LongName(Flag.Encoding)} \"{EncodingValue}\"");
+ if (this[FlagStrings.EncodingLong] == true && EncodingValue != null)
+ parameters.Add($"{FlagStrings.EncodingLong} \"{EncodingValue}\"");
}
// Format (Convert)
- if (GetSupportedCommands(Flag.FormatConvert).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FormatConvertLong))
{
- if (this[Flag.FormatConvert] == true && FormatConvertValue != null)
- parameters.Add($"{Converters.LongName(Flag.FormatConvert)} \"{FormatConvertValue}\"");
+ if (this[FlagStrings.FormatConvertLong] == true && FormatConvertValue != null)
+ parameters.Add($"{FlagStrings.FormatConvertLong} \"{FormatConvertValue}\"");
}
// Format (Dump)
- if (GetSupportedCommands(Flag.FormatDump).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.FormatDumpLong))
{
- if (this[Flag.FormatDump] == true && FormatDumpValue != null)
- parameters.Add($"{Converters.LongName(Flag.FormatDump)} \"{FormatDumpValue}\"");
+ if (this[FlagStrings.FormatDumpLong] == true && FormatDumpValue != null)
+ parameters.Add($"{FlagStrings.FormatDumpLong} \"{FormatDumpValue}\"");
}
// ImgBurn Log
- if (GetSupportedCommands(Flag.ImgBurnLog).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ImgBurnLogLong))
{
- if (this[Flag.ImgBurnLog] == true && ImgBurnLogValue != null)
- parameters.Add($"{Converters.LongName(Flag.ImgBurnLog)} \"{ImgBurnLogValue}\"");
+ if (this[FlagStrings.ImgBurnLogLong] == true && ImgBurnLogValue != null)
+ parameters.Add($"{FlagStrings.ImgBurnLogLong} \"{ImgBurnLogValue}\"");
}
// Media Barcode
- if (GetSupportedCommands(Flag.MediaBarcode).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaBarcodeLong))
{
- if (this[Flag.MediaBarcode] == true && MediaBarcodeValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaBarcode)} \"{MediaBarcodeValue}\"");
+ if (this[FlagStrings.MediaBarcodeLong] == true && MediaBarcodeValue != null)
+ parameters.Add($"{FlagStrings.MediaBarcodeLong} \"{MediaBarcodeValue}\"");
}
// Media Manufacturer
- if (GetSupportedCommands(Flag.MediaManufacturer).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaManufacturerLong))
{
- if (this[Flag.MediaManufacturer] == true && MediaManufacturerValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaManufacturer)} \"{MediaManufacturerValue}\"");
+ if (this[FlagStrings.MediaManufacturerLong] == true && MediaManufacturerValue != null)
+ parameters.Add($"{FlagStrings.MediaManufacturerLong} \"{MediaManufacturerValue}\"");
}
// Media Model
- if (GetSupportedCommands(Flag.MediaModel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaModelLong))
{
- if (this[Flag.MediaModel] == true && MediaModelValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaModel)} \"{MediaModelValue}\"");
+ if (this[FlagStrings.MediaModelLong] == true && MediaModelValue != null)
+ parameters.Add($"{FlagStrings.MediaModelLong} \"{MediaModelValue}\"");
}
// Media Part Number
- if (GetSupportedCommands(Flag.MediaPartNumber).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaPartNumberLong))
{
- if (this[Flag.MediaPartNumber] == true && MediaPartNumberValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaPartNumber)} \"{MediaPartNumberValue}\"");
+ if (this[FlagStrings.MediaPartNumberLong] == true && MediaPartNumberValue != null)
+ parameters.Add($"{FlagStrings.MediaPartNumberLong} \"{MediaPartNumberValue}\"");
}
// Media Serial
- if (GetSupportedCommands(Flag.MediaSerial).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaSerialLong))
{
- if (this[Flag.MediaSerial] == true && MediaSerialValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaSerial)} \"{MediaSerialValue}\"");
+ if (this[FlagStrings.MediaSerialLong] == true && MediaSerialValue != null)
+ parameters.Add($"{FlagStrings.MediaSerialLong} \"{MediaSerialValue}\"");
}
// Media Title
- if (GetSupportedCommands(Flag.MediaTitle).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MediaTitleLong))
{
- if (this[Flag.MediaTitle] == true && MediaTitleValue != null)
- parameters.Add($"{Converters.LongName(Flag.MediaTitle)} \"{MediaTitleValue}\"");
+ if (this[FlagStrings.MediaTitleLong] == true && MediaTitleValue != null)
+ parameters.Add($"{FlagStrings.MediaTitleLong} \"{MediaTitleValue}\"");
}
// MHDD Log
- if (GetSupportedCommands(Flag.MHDDLog).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MHDDLogLong))
{
- if (this[Flag.MHDDLog] == true && MHDDLogValue != null)
- parameters.Add($"{Converters.LongName(Flag.MHDDLog)} \"{MHDDLogValue}\"");
+ if (this[FlagStrings.MHDDLogLong] == true && MHDDLogValue != null)
+ parameters.Add($"{FlagStrings.MHDDLogLong} \"{MHDDLogValue}\"");
}
// Namespace
- if (GetSupportedCommands(Flag.Namespace).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NamespaceLong))
{
- if (this[Flag.Namespace] == true && NamespaceValue != null)
- parameters.Add($"{Converters.LongName(Flag.Namespace)} \"{NamespaceValue}\"");
+ if (this[FlagStrings.NamespaceLong] == true && NamespaceValue != null)
+ parameters.Add($"{FlagStrings.NamespaceLong} \"{NamespaceValue}\"");
}
// Options
- if (GetSupportedCommands(Flag.Options).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.OptionsLong))
{
- if (this[Flag.Options] == true && OptionsValue != null)
- parameters.Add($"{Converters.LongName(Flag.Options)} \"{OptionsValue}\"");
+ if (this[FlagStrings.OptionsLong] == true && OptionsValue != null)
+ parameters.Add($"{FlagStrings.OptionsLong} \"{OptionsValue}\"");
}
// Output Prefix
- if (GetSupportedCommands(Flag.OutputPrefix).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.OutputPrefixLong))
{
- if (this[Flag.OutputPrefix] == true && OutputPrefixValue != null)
- parameters.Add($"{Converters.LongName(Flag.OutputPrefix)} \"{OutputPrefixValue}\"");
+ if (this[FlagStrings.OutputPrefixLong] == true && OutputPrefixValue != null)
+ parameters.Add($"{FlagStrings.OutputPrefixLong} \"{OutputPrefixValue}\"");
}
// Resume File
- if (GetSupportedCommands(Flag.ResumeFile).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ResumeFileLong))
{
- if (this[Flag.ResumeFile] == true && ResumeFileValue != null)
- parameters.Add($"{Converters.LongName(Flag.ResumeFile)} \"{ResumeFileValue}\"");
+ if (this[FlagStrings.ResumeFileLong] == true && ResumeFileValue != null)
+ parameters.Add($"{FlagStrings.ResumeFileLong} \"{ResumeFileValue}\"");
}
// Subchannel
- if (GetSupportedCommands(Flag.Subchannel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SubchannelLong))
{
- if (this[Flag.Subchannel] == true && SubchannelValue != null)
- parameters.Add($"{Converters.LongName(Flag.Subchannel)} \"{SubchannelValue}\"");
+ if (this[FlagStrings.SubchannelLong] == true && SubchannelValue != null)
+ parameters.Add($"{FlagStrings.SubchannelLong} \"{SubchannelValue}\"");
}
// XML Sidecar
- if (GetSupportedCommands(Flag.XMLSidecar).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.XMLSidecarLong))
{
- if (this[Flag.XMLSidecar] == true && XMLSidecarValue != null)
- parameters.Add($"{Converters.LongName(Flag.XMLSidecar)} \"{XMLSidecarValue}\"");
+ if (this[FlagStrings.XMLSidecarLong] == true && XMLSidecarValue != null)
+ parameters.Add($"{FlagStrings.XMLSidecarLong} \"{XMLSidecarValue}\"");
}
#endregion
@@ -978,19 +956,19 @@ namespace MPF.Aaru
switch (BaseCommand)
{
// Input value only
- case Command.DeviceInfo:
- case Command.DeviceReport:
- case Command.FilesystemList:
- case Command.ImageAnalyze:
- case Command.ImageChecksum:
- case Command.ImageCreateSidecar:
- case Command.ImageDecode:
- case Command.ImageEntropy:
- case Command.ImageInfo:
- case Command.ImagePrint:
- case Command.ImageVerify:
- case Command.MediaInfo:
- case Command.MediaScan:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceInfo:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceReport:
+ case CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemListLong:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageAnalyze:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageChecksumLong:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCreateSidecar:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageDecode:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageEntropy:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageInfo:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImagePrint:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageVerify:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaInfo:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaScan:
if (string.IsNullOrWhiteSpace(InputValue))
return null;
@@ -998,7 +976,7 @@ namespace MPF.Aaru
break;
// Two input values
- case Command.ImageCompare:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCompareLong:
if (string.IsNullOrWhiteSpace(Input1Value) || string.IsNullOrWhiteSpace(Input2Value))
return null;
@@ -1007,9 +985,9 @@ namespace MPF.Aaru
break;
// Input and Output value
- case Command.FilesystemExtract:
- case Command.ImageConvert:
- case Command.MediaDump:
+ case CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemExtract:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageConvert:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaDump:
if (string.IsNullOrWhiteSpace(InputValue) || string.IsNullOrWhiteSpace(OutputValue))
return null;
@@ -1018,8 +996,8 @@ namespace MPF.Aaru
break;
// Remote host value only
- case Command.DeviceList:
- case Command.Remote:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceList:
+ case CommandStrings.Remote:
if (string.IsNullOrWhiteSpace(RemoteHostValue))
return null;
@@ -1030,6 +1008,304 @@ namespace MPF.Aaru
return string.Join(" ", parameters);
}
+ ///
+ public override Dictionary> GetCommandSupport()
+ {
+ return new Dictionary>()
+ {
+ #region Database Family
+
+ [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseStats] = new List()
+ {
+ },
+
+ [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseUpdate] = new List()
+ {
+ FlagStrings.ClearLong,
+ FlagStrings.ClearAllLong,
+ },
+
+ #endregion
+
+ #region Device Family
+
+ [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceInfo] = new List()
+ {
+ FlagStrings.OutputPrefixLong,
+ },
+
+ [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceList] = new List()
+ {
+ },
+
+ [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceReport] = new List()
+ {
+ },
+
+ #endregion
+
+ #region Filesystem Family
+
+ [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemExtract] = new List()
+ {
+ FlagStrings.EncodingLong,
+ FlagStrings.EncodingShort,
+ FlagStrings.ExtendedAttributesLong,
+ FlagStrings.ExtendedAttributesShort,
+ FlagStrings.NamespaceLong,
+ FlagStrings.NamespaceShort,
+ FlagStrings.OptionsLong,
+ FlagStrings.OptionsShort,
+ },
+
+ [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemListLong] = new List()
+ {
+ FlagStrings.EncodingLong,
+ FlagStrings.EncodingShort,
+ FlagStrings.LongFormatLong,
+ FlagStrings.LongFormatShort,
+ FlagStrings.NamespaceLong,
+ FlagStrings.NamespaceShort,
+ FlagStrings.OptionsLong,
+ FlagStrings.OptionsShort,
+ },
+
+ [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemOptions] = new List()
+ {
+ },
+
+ #endregion
+
+ #region Image Family
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageAnalyze] = new List()
+ {
+ FlagStrings.EncodingLong,
+ FlagStrings.EncodingShort,
+ FlagStrings.FilesystemsLong,
+ FlagStrings.FilesystemsShort,
+ FlagStrings.PartitionsLong,
+ FlagStrings.PartitionsShort,
+ FlagStrings.VerifyDiscLong,
+ FlagStrings.VerifyDiscShort,
+ FlagStrings.VerifySectorsLong,
+ FlagStrings.VerifySectorsShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageChecksumLong] = new List()
+ {
+ FlagStrings.Adler32Long,
+ FlagStrings.Adler32Short,
+ FlagStrings.CRC16Long,
+ FlagStrings.CRC32Long,
+ FlagStrings.CRC32Short,
+ FlagStrings.CRC64Long,
+ FlagStrings.Fletcher16Long,
+ FlagStrings.Fletcher32Long,
+ FlagStrings.MD5Long,
+ FlagStrings.MD5Short,
+ FlagStrings.SeparatedTracksLong,
+ FlagStrings.SeparatedTracksShort,
+ FlagStrings.SHA1Long,
+ FlagStrings.SHA1Short,
+ FlagStrings.SHA256Long,
+ FlagStrings.SHA384Long,
+ FlagStrings.SHA512Long,
+ FlagStrings.SpamSumLong,
+ FlagStrings.SpamSumShort,
+ FlagStrings.WholeDiscLong,
+ FlagStrings.WholeDiscShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCompareLong] = new List()
+ {
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageConvert] = new List()
+ {
+ FlagStrings.CommentsLong,
+ FlagStrings.CountLong,
+ FlagStrings.CountShort,
+ FlagStrings.CreatorLong,
+ FlagStrings.DriveManufacturerLong,
+ FlagStrings.DriveModelLong,
+ FlagStrings.DriveRevisionLong,
+ FlagStrings.DriveSerialLong,
+ FlagStrings.ForceLong,
+ FlagStrings.ForceShort,
+ FlagStrings.FormatConvertLong,
+ FlagStrings.FormatConvertShort,
+ FlagStrings.MediaBarcodeLong,
+ FlagStrings.MediaLastSequenceLong,
+ FlagStrings.MediaManufacturerLong,
+ FlagStrings.MediaModelLong,
+ FlagStrings.MediaPartNumberLong,
+ FlagStrings.MediaSequenceLong,
+ FlagStrings.MediaSerialLong,
+ FlagStrings.MediaTitleLong,
+ FlagStrings.OptionsLong,
+ FlagStrings.OptionsShort,
+ FlagStrings.ResumeFileLong,
+ FlagStrings.ResumeFileShort,
+ FlagStrings.XMLSidecarLong,
+ FlagStrings.XMLSidecarShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCreateSidecar] = new List()
+ {
+ FlagStrings.BlockSizeLong,
+ FlagStrings.BlockSizeShort,
+ FlagStrings.EncodingLong,
+ FlagStrings.EncodingShort,
+ FlagStrings.TapeLong,
+ FlagStrings.TapeShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageDecode] = new List()
+ {
+ FlagStrings.DiskTagsLong,
+ FlagStrings.DiskTagsShort,
+ FlagStrings.LengthLong,
+ FlagStrings.LengthShort,
+ FlagStrings.SectorTagsLong,
+ FlagStrings.SectorTagsShort,
+ FlagStrings.StartLong,
+ FlagStrings.StartShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageEntropy] = new List()
+ {
+ FlagStrings.DuplicatedSectorsLong,
+ FlagStrings.DuplicatedSectorsShort,
+ FlagStrings.SeparatedTracksLong,
+ FlagStrings.SeparatedTracksShort,
+ FlagStrings.WholeDiscLong,
+ FlagStrings.WholeDiscShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageInfo] = new List()
+ {
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageOptions] = new List()
+ {
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImagePrint] = new List()
+ {
+ FlagStrings.LengthLong,
+ FlagStrings.LengthShort,
+ FlagStrings.LongSectorsLong,
+ FlagStrings.LongSectorsShort,
+ FlagStrings.StartLong,
+ FlagStrings.StartShort,
+ FlagStrings.WidthLong,
+ FlagStrings.WidthShort,
+ },
+
+ [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageVerify] = new List()
+ {
+ FlagStrings.VerifyDiscLong,
+ FlagStrings.VerifyDiscShort,
+ FlagStrings.VerifySectorsLong,
+ FlagStrings.VerifySectorsShort,
+ },
+
+ #endregion
+
+ #region Media Family
+
+ [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaDump] = new List()
+ {
+ FlagStrings.EjectLong,
+ FlagStrings.EncodingLong,
+ FlagStrings.EncodingShort,
+ FlagStrings.FirstPregapLong,
+ FlagStrings.FixOffsetLong,
+ FlagStrings.FixSubchannelLong,
+ FlagStrings.FixSubchannelCrcLong,
+ FlagStrings.FixSubchannelPositionLong,
+ FlagStrings.ForceLong,
+ FlagStrings.ForceShort,
+ FlagStrings.FormatConvertLong,
+ FlagStrings.FormatConvertShort,
+ FlagStrings.GenerateSubchannelsLong,
+ FlagStrings.MetadataLong,
+ FlagStrings.OptionsLong,
+ FlagStrings.OptionsShort,
+ FlagStrings.PersistentLong,
+ FlagStrings.PrivateLong,
+ FlagStrings.ResumeLong,
+ FlagStrings.ResumeShort,
+ FlagStrings.RetryPassesLong,
+ FlagStrings.RetryPassesShort,
+ FlagStrings.RetrySubchannelLong,
+ FlagStrings.SkipLong,
+ FlagStrings.SkipShort,
+ FlagStrings.SkipCdiReadyHoleLong,
+ FlagStrings.SpeedLong,
+ FlagStrings.StopOnErrorLong,
+ FlagStrings.StopOnErrorShort,
+ FlagStrings.SubchannelLong,
+ FlagStrings.TrimLong,
+ FlagStrings.XMLSidecarLong,
+ FlagStrings.XMLSidecarShort,
+ },
+
+ [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaInfo] = new List()
+ {
+ FlagStrings.OutputPrefixLong,
+ FlagStrings.OutputPrefixShort,
+ },
+
+ [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaScan] = new List()
+ {
+ FlagStrings.ImgBurnLogLong,
+ FlagStrings.ImgBurnLogShort,
+ FlagStrings.MHDDLogLong,
+ FlagStrings.MHDDLogShort,
+ },
+
+ #endregion
+
+ #region Standalone Commands
+
+ [CommandStrings.NONE] = new List()
+ {
+ FlagStrings.DebugLong,
+ FlagStrings.DebugShort,
+ FlagStrings.HelpLong,
+ FlagStrings.HelpShort,
+ FlagStrings.HelpShortAlt,
+ FlagStrings.VerboseLong,
+ FlagStrings.VerboseShort,
+ FlagStrings.VersionLong,
+ },
+
+ [CommandStrings.Configure] = new List()
+ {
+ },
+
+ [CommandStrings.Formats] = new List()
+ {
+ },
+
+ [CommandStrings.ListEncodings] = new List()
+ {
+ },
+
+ [CommandStrings.ListNamespaces] = new List()
+ {
+ },
+
+ [CommandStrings.Remote] = new List()
+ {
+ },
+
+ #endregion
+ };
+ }
+
///
public override string GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType);
@@ -1080,7 +1356,7 @@ namespace MPF.Aaru
{
switch (BaseCommand)
{
- case Command.MediaDump:
+ case CommandStrings.MediaDump:
return true;
default:
@@ -1091,9 +1367,9 @@ namespace MPF.Aaru
///
protected override void ResetValues()
{
- BaseCommand = Command.NONE;
+ BaseCommand = CommandStrings.NONE;
- _flags = new Dictionary();
+ flags = new Dictionary();
BlockSizeValue = null;
CommentsValue = null;
@@ -1138,14 +1414,14 @@ namespace MPF.Aaru
///
protected override void SetDefaultParameters(char driveLetter, string filename, int? driveSpeed, Options options)
{
- BaseCommand = Command.MediaDump;
+ BaseCommand = $"{CommandStrings.MediaPrefixLong} {CommandStrings.MediaDump}";
InputValue = $"\\\\?\\{driveLetter}:";
OutputValue = filename;
if (driveSpeed != null)
{
- this[Flag.Speed] = true;
+ this[FlagStrings.SpeedLong] = true;
SpeedValue = (sbyte?)driveSpeed;
}
@@ -1157,24 +1433,24 @@ namespace MPF.Aaru
// Set retry count
if (options.AaruRereadCount > 0)
{
- this[Flag.RetryPasses] = true;
+ this[FlagStrings.RetryPassesLong] = true;
RetryPassesValue = (short)options.AaruRereadCount;
}
// Set user-defined options
- this[Flag.Debug] = options.AaruEnableDebug;
- this[Flag.Verbose] = options.AaruEnableVerbose;
- this[Flag.Force] = options.AaruForceDumping;
- this[Flag.Private] = options.AaruStripPersonalData;
+ this[FlagStrings.DebugLong] = options.AaruEnableDebug;
+ this[FlagStrings.VerboseLong] = options.AaruEnableVerbose;
+ this[FlagStrings.ForceLong] = options.AaruForceDumping;
+ this[FlagStrings.PrivateLong] = options.AaruStripPersonalData;
// TODO: Look at dump-media formats and the like and see what options there are there to fill in defaults
// Now sort based on disc type
switch (this.Type)
{
case MediaType.CDROM:
- this[Flag.FirstPregap] = true;
- this[Flag.FixOffset] = true;
- this[Flag.Subchannel] = true;
+ this[FlagStrings.FirstPregapLong] = true;
+ this[FlagStrings.FixOffsetLong] = true;
+ this[FlagStrings.SubchannelLong] = true;
SubchannelValue = "any";
break;
case MediaType.DVD:
@@ -1208,6 +1484,8 @@ namespace MPF.Aaru
///
protected override bool ValidateAndSetParameters(string parameters)
{
+ BaseCommand = CommandStrings.NONE;
+
// The string has to be valid by itself first
if (string.IsNullOrWhiteSpace(parameters))
return false;
@@ -1228,30 +1506,34 @@ namespace MPF.Aaru
int keyCount = Keys.Count();
// Debug
- ProcessFlagParameter(parts, FlagStrings.DebugShort, FlagStrings.DebugLong, Flag.Debug, ref start);
+ ProcessFlagParameter(parts, FlagStrings.DebugShort, FlagStrings.DebugLong, ref start);
// Verbose
- ProcessFlagParameter(parts, FlagStrings.VerboseShort, FlagStrings.VerboseLong, Flag.Verbose, ref start);
+ ProcessFlagParameter(parts, FlagStrings.VerboseShort, FlagStrings.VerboseLong, ref start);
// Version
- ProcessFlagParameter(parts, null, FlagStrings.VersionLong, Flag.Version, ref start);
+ ProcessFlagParameter(parts, null, FlagStrings.VersionLong, ref start);
// Help
- ProcessFlagParameter(parts, FlagStrings.HelpShort, FlagStrings.HelpLong, Flag.Help, ref start);
- ProcessFlagParameter(parts, FlagStrings.HelpShortAlt, null, Flag.Help, ref start);
+ ProcessFlagParameter(parts, FlagStrings.HelpShort, FlagStrings.HelpLong, ref start);
+ ProcessFlagParameter(parts, FlagStrings.HelpShortAlt, FlagStrings.HelpLong, ref start);
// If we didn't add any new flags, break out since we might be at command handling
if (keyCount == Keys.Count())
break;
}
- // Determine what the commandline should look like given the first item
- BaseCommand = Converters.StringToCommand(parts[start], parts.Count > start ? parts[start + 1] : null, out bool useSecond);
- if (BaseCommand == Command.NONE)
+ // If the required starting index doesn't exist, we can't do anything
+ if (!DoesExist(parts, start))
return false;
- // Set the start according to what the full command was
- start += useSecond ? 2 : 1;
+ // Determine what the commandline should look like given the first item
+ BaseCommand = NormalizeCommand(parts, ref start);
+ if (string.IsNullOrWhiteSpace(BaseCommand))
+ return false;
+
+ // Set the start position
+ start++;
// Loop through all auxilary flags, if necessary
int i = 0;
@@ -1270,140 +1552,140 @@ namespace MPF.Aaru
#region Boolean flags
// Adler-32
- ProcessFlagParameter(parts, FlagStrings.Adler32Short, FlagStrings.Adler32Long, Flag.Adler32, ref i);
+ ProcessFlagParameter(parts, FlagStrings.Adler32Short, FlagStrings.Adler32Long, ref i);
// Clear
- ProcessFlagParameter(parts, null, FlagStrings.ClearLong, Flag.Clear, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.ClearLong, ref i);
// Clear All
- ProcessFlagParameter(parts, null, FlagStrings.ClearAllLong, Flag.ClearAll, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.ClearAllLong, ref i);
// CRC16
- ProcessFlagParameter(parts, null, FlagStrings.CRC16Long, Flag.CRC16, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.CRC16Long, ref i);
// CRC32
- ProcessFlagParameter(parts, FlagStrings.CRC32Short, FlagStrings.CRC32Long, Flag.CRC32, ref i);
+ ProcessFlagParameter(parts, FlagStrings.CRC32Short, FlagStrings.CRC32Long, ref i);
// CRC64
- ProcessFlagParameter(parts, null, FlagStrings.CRC64Long, Flag.CRC64, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.CRC64Long, ref i);
// Disk Tags
- ProcessFlagParameter(parts, FlagStrings.DiskTagsShort, FlagStrings.DiskTagsLong, Flag.DiskTags, ref i);
+ ProcessFlagParameter(parts, FlagStrings.DiskTagsShort, FlagStrings.DiskTagsLong, ref i);
// Deduplicated Sectors
- ProcessFlagParameter(parts, FlagStrings.DuplicatedSectorsShort, FlagStrings.DuplicatedSectorsLong, Flag.DuplicatedSectors, ref i);
+ ProcessFlagParameter(parts, FlagStrings.DuplicatedSectorsShort, FlagStrings.DuplicatedSectorsLong, ref i);
// Eject
- ProcessFlagParameter(parts, null, FlagStrings.EjectLong, Flag.Eject, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.EjectLong, ref i);
// Extended Attributes
- ProcessFlagParameter(parts, FlagStrings.ExtendedAttributesShort, FlagStrings.ExtendedAttributesLong, Flag.ExtendedAttributes, ref i);
+ ProcessFlagParameter(parts, FlagStrings.ExtendedAttributesShort, FlagStrings.ExtendedAttributesLong, ref i);
// Filesystems
- ProcessFlagParameter(parts, FlagStrings.FilesystemsShort, FlagStrings.FilesystemsLong, Flag.Filesystems, ref i);
+ ProcessFlagParameter(parts, FlagStrings.FilesystemsShort, FlagStrings.FilesystemsLong, ref i);
// First Pregap
- ProcessFlagParameter(parts, null, FlagStrings.FirstPregapLong, Flag.FirstPregap, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.FirstPregapLong, ref i);
// Fix Offset
- ProcessFlagParameter(parts, null, FlagStrings.FixOffsetLong, Flag.FixOffset, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.FixOffsetLong, ref i);
// Fix Subchannel
- ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelLong, Flag.FixSubchannel, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelLong, ref i);
// Fix Subchannel CRC
- ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelCrcLong, Flag.FixSubchannelCrc, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelCrcLong, ref i);
// Fix Subchannel Position
- ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelPositionLong, Flag.FixSubchannelPosition, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.FixSubchannelPositionLong, ref i);
// Fletcher-16
- ProcessFlagParameter(parts, null, FlagStrings.Fletcher16Long, Flag.Fletcher16, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.Fletcher16Long, ref i);
// Fletcher-32
- ProcessFlagParameter(parts, null, FlagStrings.Fletcher32Long, Flag.Fletcher32, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.Fletcher32Long, ref i);
// Force
- ProcessFlagParameter(parts, FlagStrings.ForceShort, FlagStrings.ForceLong, Flag.Force, ref i);
+ ProcessFlagParameter(parts, FlagStrings.ForceShort, FlagStrings.ForceLong, ref i);
// Generate Subchannels
- ProcessFlagParameter(parts, null, FlagStrings.GenerateSubchannelsLong, Flag.GenerateSubchannels, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.GenerateSubchannelsLong, ref i);
// Long Format
- ProcessFlagParameter(parts, FlagStrings.LongFormatShort, FlagStrings.LongFormatLong, Flag.LongFormat, ref i);
+ ProcessFlagParameter(parts, FlagStrings.LongFormatShort, FlagStrings.LongFormatLong, ref i);
// Long Sectors
- ProcessFlagParameter(parts, FlagStrings.LongSectorsShort, FlagStrings.LongSectorsLong, Flag.LongSectors, ref i);
+ ProcessFlagParameter(parts, FlagStrings.LongSectorsShort, FlagStrings.LongSectorsLong, ref i);
// MD5
- ProcessFlagParameter(parts, FlagStrings.MD5Short, FlagStrings.MD5Long, Flag.MD5, ref i);
+ ProcessFlagParameter(parts, FlagStrings.MD5Short, FlagStrings.MD5Long, ref i);
// Metadata
- ProcessFlagParameter(parts, null, FlagStrings.MetadataLong, Flag.Metadata, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.MetadataLong, ref i);
// Partitions
- ProcessFlagParameter(parts, FlagStrings.PartitionsShort, FlagStrings.PartitionsLong, Flag.Partitions, ref i);
+ ProcessFlagParameter(parts, FlagStrings.PartitionsShort, FlagStrings.PartitionsLong, ref i);
// Persistent
- ProcessFlagParameter(parts, null, FlagStrings.PersistentLong, Flag.Persistent, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.PersistentLong, ref i);
// Private
- ProcessFlagParameter(parts, null, FlagStrings.PrivateLong, Flag.Private, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.PrivateLong, ref i);
// Resume
- ProcessFlagParameter(parts, FlagStrings.ResumeShort, FlagStrings.ResumeLong, Flag.Resume, ref i);
+ ProcessFlagParameter(parts, FlagStrings.ResumeShort, FlagStrings.ResumeLong, ref i);
// Retry Subchannel
- ProcessFlagParameter(parts, null, FlagStrings.RetrySubchannelLong, Flag.RetrySubchannel, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.RetrySubchannelLong, ref i);
// Sector Tags
- ProcessFlagParameter(parts, FlagStrings.SectorTagsShort, FlagStrings.SectorTagsLong, Flag.SectorTags, ref i);
+ ProcessFlagParameter(parts, FlagStrings.SectorTagsShort, FlagStrings.SectorTagsLong, ref i);
// Separated Tracks
- ProcessFlagParameter(parts, FlagStrings.SeparatedTracksShort, FlagStrings.SeparatedTracksLong, Flag.SeparatedTracks, ref i);
+ ProcessFlagParameter(parts, FlagStrings.SeparatedTracksShort, FlagStrings.SeparatedTracksLong, ref i);
// SHA-1
- ProcessFlagParameter(parts, FlagStrings.SHA1Short, FlagStrings.SHA1Long, Flag.SHA1, ref i);
+ ProcessFlagParameter(parts, FlagStrings.SHA1Short, FlagStrings.SHA1Long, ref i);
// SHA-256
- ProcessFlagParameter(parts, null, FlagStrings.SHA256Long, Flag.SHA256, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.SHA256Long, ref i);
// SHA-384
- ProcessFlagParameter(parts, null, FlagStrings.SHA384Long, Flag.SHA384, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.SHA384Long, ref i);
// SHA-512
- ProcessFlagParameter(parts, null, FlagStrings.SHA512Long, Flag.SHA512, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.SHA512Long, ref i);
// Skip CD-i Ready Hole
- ProcessFlagParameter(parts, null, FlagStrings.SkipCdiReadyHoleLong, Flag.SkipCdiReadyHole, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.SkipCdiReadyHoleLong, ref i);
// SpamSum
- ProcessFlagParameter(parts, FlagStrings.SpamSumShort, FlagStrings.SpamSumLong, Flag.SpamSum, ref i);
+ ProcessFlagParameter(parts, FlagStrings.SpamSumShort, FlagStrings.SpamSumLong, ref i);
// Stop on Error
- ProcessFlagParameter(parts, FlagStrings.StopOnErrorShort, FlagStrings.StopOnErrorLong, Flag.StopOnError, ref i);
+ ProcessFlagParameter(parts, FlagStrings.StopOnErrorShort, FlagStrings.StopOnErrorLong, ref i);
// Tape
- ProcessFlagParameter(parts, FlagStrings.TapeShort, FlagStrings.TapeLong, Flag.Tape, ref i);
+ ProcessFlagParameter(parts, FlagStrings.TapeShort, FlagStrings.TapeLong, ref i);
// Trim
- ProcessFlagParameter(parts, null, FlagStrings.TrimLong, Flag.Trim, ref i);
+ ProcessFlagParameter(parts, null, FlagStrings.TrimLong, ref i);
// Verify Disc
- ProcessFlagParameter(parts, FlagStrings.VerifyDiscShort, FlagStrings.VerifyDiscLong, Flag.VerifyDisc, ref i);
+ ProcessFlagParameter(parts, FlagStrings.VerifyDiscShort, FlagStrings.VerifyDiscLong, ref i);
// Verify Sectors
- ProcessFlagParameter(parts, FlagStrings.VerifySectorsShort, FlagStrings.VerifySectorsLong, Flag.VerifySectors, ref i);
+ ProcessFlagParameter(parts, FlagStrings.VerifySectorsShort, FlagStrings.VerifySectorsLong, ref i);
// Whole Disc
- ProcessFlagParameter(parts, FlagStrings.WholeDiscShort, FlagStrings.WholeDiscLong, Flag.VerifySectors, ref i);
+ ProcessFlagParameter(parts, FlagStrings.WholeDiscShort, FlagStrings.WholeDiscLong, ref i);
#endregion
#region Int8 flags
// Speed
- byteValue = ProcessInt8Parameter(parts, null, FlagStrings.SpeedLong, Flag.Speed, ref i);
+ byteValue = ProcessInt8Parameter(parts, null, FlagStrings.SpeedLong, ref i);
if (byteValue == null && byteValue != SByte.MinValue)
SpeedValue = byteValue;
@@ -1412,12 +1694,12 @@ namespace MPF.Aaru
#region Int16 flags
// Retry Passes
- shortValue = ProcessInt16Parameter(parts, FlagStrings.RetryPassesShort, FlagStrings.RetryPassesLong, Flag.RetryPasses, ref i);
+ shortValue = ProcessInt16Parameter(parts, FlagStrings.RetryPassesShort, FlagStrings.RetryPassesLong, ref i);
if (shortValue != null && shortValue != Int16.MinValue)
RetryPassesValue = shortValue;
// Width
- shortValue = ProcessInt16Parameter(parts, FlagStrings.WidthShort, FlagStrings.WidthLong, Flag.Width, ref i);
+ shortValue = ProcessInt16Parameter(parts, FlagStrings.WidthShort, FlagStrings.WidthLong, ref i);
if (shortValue != null && shortValue != Int16.MinValue)
WidthValue = shortValue;
@@ -1426,27 +1708,27 @@ namespace MPF.Aaru
#region Int32 flags
// Block Size
- intValue = ProcessInt32Parameter(parts, FlagStrings.BlockSizeShort, FlagStrings.BlockSizeLong, Flag.BlockSize, ref i);
+ intValue = ProcessInt32Parameter(parts, FlagStrings.BlockSizeShort, FlagStrings.BlockSizeLong, ref i);
if (intValue != null && intValue != Int32.MinValue)
BlockSizeValue = intValue;
// Count
- intValue = ProcessInt32Parameter(parts, FlagStrings.CountShort, FlagStrings.CountLong, Flag.Count, ref i);
+ intValue = ProcessInt32Parameter(parts, FlagStrings.CountShort, FlagStrings.CountLong, ref i);
if (intValue != null && intValue != Int32.MinValue)
CountValue = intValue;
// Media Last Sequence
- intValue = ProcessInt32Parameter(parts, null, FlagStrings.MediaLastSequenceLong, Flag.MediaLastSequence, ref i);
+ intValue = ProcessInt32Parameter(parts, null, FlagStrings.MediaLastSequenceLong, ref i);
if (intValue != null && intValue != Int32.MinValue)
MediaLastSequenceValue = intValue;
// Media Sequence
- intValue = ProcessInt32Parameter(parts, null, FlagStrings.MediaSequenceLong, Flag.MediaSequence, ref i);
+ intValue = ProcessInt32Parameter(parts, null, FlagStrings.MediaSequenceLong, ref i);
if (intValue != null && intValue != Int32.MinValue)
MediaSequenceValue = intValue;
// Skip
- intValue = ProcessInt32Parameter(parts, FlagStrings.SkipShort, FlagStrings.SkipLong, Flag.Skip, ref i);
+ intValue = ProcessInt32Parameter(parts, FlagStrings.SkipShort, FlagStrings.SkipLong, ref i);
if (intValue != null && intValue != Int32.MinValue)
SkipValue = intValue;
@@ -1455,20 +1737,20 @@ namespace MPF.Aaru
#region Int64 flags
// Length
- longValue = ProcessInt64Parameter(parts, FlagStrings.LengthShort, FlagStrings.LengthLong, Flag.Length, ref i);
+ longValue = ProcessInt64Parameter(parts, FlagStrings.LengthShort, FlagStrings.LengthLong, ref i);
if (longValue != null && longValue != Int64.MinValue)
{
LengthValue = longValue;
}
else
{
- stringValue = ProcessStringParameter(parts, FlagStrings.LengthShort, FlagStrings.LengthLong, Flag.Length, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.LengthShort, FlagStrings.LengthLong, ref i);
if (string.Equals(stringValue, "all"))
LengthValue = -1;
}
// Start -- Required value
- longValue = ProcessInt64Parameter(parts, FlagStrings.StartShort, FlagStrings.StartLong, Flag.Start, ref i);
+ longValue = ProcessInt64Parameter(parts, FlagStrings.StartShort, FlagStrings.StartLong, ref i);
if (longValue == null)
return false;
else if (longValue != Int64.MinValue)
@@ -1479,112 +1761,112 @@ namespace MPF.Aaru
#region String flags
// Comments
- stringValue = ProcessStringParameter(parts, null, FlagStrings.CommentsLong, Flag.Comments, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.CommentsLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
CommentsValue = stringValue;
// Creator
- stringValue = ProcessStringParameter(parts, null, FlagStrings.CreatorLong, Flag.Creator, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.CreatorLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
CreatorValue = stringValue;
// Drive Manufacturer
- stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveManufacturerLong, Flag.DriveManufacturer, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveManufacturerLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
DriveManufacturerValue = stringValue;
// Drive Model
- stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveModelLong, Flag.DriveModel, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveModelLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
DriveModelValue = stringValue;
// Drive Revision
- stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveRevisionLong, Flag.DriveRevision, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveRevisionLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
DriveRevisionValue = stringValue;
// Drive Serial
- stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveSerialLong, Flag.DriveSerial, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.DriveSerialLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
DriveSerialValue = stringValue;
// Encoding -- TODO: List of encodings?
- stringValue = ProcessStringParameter(parts, FlagStrings.EncodingShort, FlagStrings.EncodingLong, Flag.Encoding, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.EncodingShort, FlagStrings.EncodingLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
EncodingValue = stringValue;
// Format (Convert) -- TODO: List of formats?
- stringValue = ProcessStringParameter(parts, FlagStrings.FormatConvertShort, FlagStrings.FormatConvertLong, Flag.FormatConvert, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.FormatConvertShort, FlagStrings.FormatConvertLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
FormatConvertValue = stringValue;
// Format (Dump) -- TODO: List of formats?
- stringValue = ProcessStringParameter(parts, FlagStrings.FormatDumpShort, FlagStrings.FormatDumpLong, Flag.FormatDump, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.FormatDumpShort, FlagStrings.FormatDumpLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
FormatDumpValue = stringValue;
// ImgBurn Log
- stringValue = ProcessStringParameter(parts, FlagStrings.ImgBurnLogShort, FlagStrings.ImgBurnLogLong, Flag.ImgBurnLog, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.ImgBurnLogShort, FlagStrings.ImgBurnLogLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
ImgBurnLogValue = stringValue;
// Media Barcode
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaBarcodeLong, Flag.MediaBarcode, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaBarcodeLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaBarcodeValue = stringValue;
// Media Manufacturer
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaManufacturerLong, Flag.MediaManufacturer, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaManufacturerLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaManufacturerValue = stringValue;
// Media Model
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaModelLong, Flag.MediaModel, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaModelLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaModelValue = stringValue;
// Media Part Number
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaPartNumberLong, Flag.MediaPartNumber, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaPartNumberLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaPartNumberValue = stringValue;
// Media Serial
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaSerialLong, Flag.MediaSerial, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaSerialLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaSerialValue = stringValue;
// Media Title
- stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaTitleLong, Flag.MediaTitle, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.MediaTitleLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MediaTitleValue = stringValue;
// MHDD Log
- stringValue = ProcessStringParameter(parts, FlagStrings.MHDDLogShort, FlagStrings.MHDDLogLong, Flag.MHDDLog, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.MHDDLogShort, FlagStrings.MHDDLogLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
MHDDLogValue = stringValue;
// Namespace
- stringValue = ProcessStringParameter(parts, FlagStrings.NamespaceShort, FlagStrings.NamespaceLong, Flag.Namespace, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.NamespaceShort, FlagStrings.NamespaceLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
NamespaceValue = stringValue;
// Options -- TODO: Validate options?
- stringValue = ProcessStringParameter(parts, FlagStrings.OptionsShort, FlagStrings.OptionsLong, Flag.Options, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.OptionsShort, FlagStrings.OptionsLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
OptionsValue = stringValue;
// Output Prefix
- stringValue = ProcessStringParameter(parts, FlagStrings.OutputPrefixShort, FlagStrings.OutputPrefixLong, Flag.OutputPrefix, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.OutputPrefixShort, FlagStrings.OutputPrefixLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
OutputPrefixValue = stringValue;
// Resume File
- stringValue = ProcessStringParameter(parts, FlagStrings.ResumeFileShort, FlagStrings.ResumeFileLong, Flag.ResumeFile, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.ResumeFileShort, FlagStrings.ResumeFileLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
ResumeFileValue = stringValue;
// Subchannel
- stringValue = ProcessStringParameter(parts, null, FlagStrings.SubchannelLong, Flag.Subchannel, ref i);
+ stringValue = ProcessStringParameter(parts, null, FlagStrings.SubchannelLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
{
if (string.Equals(stringValue, "any")
@@ -1603,7 +1885,7 @@ namespace MPF.Aaru
}
// XML Sidecar
- stringValue = ProcessStringParameter(parts, FlagStrings.XMLSidecarShort, FlagStrings.XMLSidecarLong, Flag.XMLSidecar, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.XMLSidecarShort, FlagStrings.XMLSidecarLong, ref i);
if (!string.IsNullOrEmpty(stringValue))
XMLSidecarValue = stringValue;
@@ -1618,19 +1900,19 @@ namespace MPF.Aaru
switch (BaseCommand)
{
// Input value only
- case Command.DeviceInfo:
- case Command.DeviceReport:
- case Command.FilesystemList:
- case Command.ImageAnalyze:
- case Command.ImageChecksum:
- case Command.ImageCreateSidecar:
- case Command.ImageDecode:
- case Command.ImageEntropy:
- case Command.ImageInfo:
- case Command.ImagePrint:
- case Command.ImageVerify:
- case Command.MediaInfo:
- case Command.MediaScan:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceInfo:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceReport:
+ case CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemListLong:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageAnalyze:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageChecksumLong:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCreateSidecar:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageDecode:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageEntropy:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageInfo:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImagePrint:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageVerify:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaInfo:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaScan:
if (!DoesExist(parts, i))
return false;
@@ -1639,7 +1921,7 @@ namespace MPF.Aaru
break;
// Two input values
- case Command.ImageCompare:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCompareLong:
if (!DoesExist(parts, i))
return false;
@@ -1654,9 +1936,9 @@ namespace MPF.Aaru
break;
// Input and Output value
- case Command.FilesystemExtract:
- case Command.ImageConvert:
- case Command.MediaDump:
+ case CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemExtract:
+ case CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageConvert:
+ case CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaDump:
if (!DoesExist(parts, i))
return false;
@@ -1671,8 +1953,8 @@ namespace MPF.Aaru
break;
// Remote host value only
- case Command.DeviceList:
- case Command.Remote:
+ case CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceList:
+ case CommandStrings.Remote:
if (!DoesExist(parts, i))
return false;
@@ -1693,493 +1975,229 @@ namespace MPF.Aaru
#region Private Extra Methods
///
- /// Get the list of commands that use a given flag
+ /// Normalize a command string to use long form values for easier lookup
///
- /// Flag value to get commands for
- /// List of Commands, if possible
- private static List GetSupportedCommands(Flag flag)
+ /// Command string to normalize
+ /// Normalized command
+ private string NormalizeCommand(List parts, ref int start)
{
- var commands = new List();
- switch (flag)
- {
- case Flag.Adler32:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.BlockSize:
- commands.Add(Command.ImageCreateSidecar);
- break;
- case Flag.Clear:
- commands.Add(Command.DatabaseUpdate);
- break;
- case Flag.ClearAll:
- commands.Add(Command.DatabaseUpdate);
- break;
- case Flag.Comments:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.Count:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.CRC16:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.CRC32:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.CRC64:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.Creator:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.Debug:
- commands.Add(Command.NONE);
- break;
- case Flag.DiskTags:
- commands.Add(Command.ImageDecode);
- break;
- case Flag.DriveManufacturer:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.DriveModel:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.DriveRevision:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.DriveSerial:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.DuplicatedSectors:
- commands.Add(Command.ImageEntropy);
- break;
- case Flag.Eject:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Encoding:
- commands.Add(Command.FilesystemExtract);
- commands.Add(Command.FilesystemList);
- commands.Add(Command.ImageAnalyze);
- commands.Add(Command.ImageCreateSidecar);
- commands.Add(Command.MediaDump);
- break;
- case Flag.ExtendedAttributes:
- commands.Add(Command.FilesystemExtract);
- break;
- case Flag.Filesystems:
- commands.Add(Command.ImageAnalyze);
- break;
- case Flag.FirstPregap:
- commands.Add(Command.MediaDump);
- break;
- case Flag.FixOffset:
- commands.Add(Command.MediaDump);
- break;
- case Flag.FixSubchannel:
- commands.Add(Command.MediaDump);
- break;
- case Flag.FixSubchannelCrc:
- commands.Add(Command.MediaDump);
- break;
- case Flag.FixSubchannelPosition:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Fletcher16:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.Fletcher32:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.Force:
- commands.Add(Command.ImageConvert);
- commands.Add(Command.MediaDump);
- break;
- case Flag.FormatConvert:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.FormatDump:
- commands.Add(Command.MediaDump);
- break;
- case Flag.GenerateSubchannels:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Help:
- commands.Add(Command.NONE);
- break;
- case Flag.ImgBurnLog:
- commands.Add(Command.MediaScan);
- break;
- case Flag.Length:
- commands.Add(Command.ImageDecode);
- commands.Add(Command.ImagePrint);
- break;
- case Flag.LongFormat:
- commands.Add(Command.FilesystemList);
- break;
- case Flag.LongSectors:
- commands.Add(Command.ImagePrint);
- break;
- case Flag.MD5:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.MediaBarcode:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaLastSequence:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaManufacturer:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaModel:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaPartNumber:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaSequence:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaSerial:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.MediaTitle:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.Metadata:
- commands.Add(Command.MediaDump);
- break;
- case Flag.MHDDLog:
- commands.Add(Command.MediaScan);
- break;
- case Flag.Namespace:
- commands.Add(Command.FilesystemExtract);
- commands.Add(Command.FilesystemList);
- break;
- case Flag.Options:
- commands.Add(Command.FilesystemExtract);
- commands.Add(Command.FilesystemList);
- commands.Add(Command.ImageConvert);
- commands.Add(Command.MediaDump);
- break;
- case Flag.OutputPrefix:
- commands.Add(Command.DeviceInfo);
- commands.Add(Command.MediaInfo);
- break;
- case Flag.Partitions:
- commands.Add(Command.ImageAnalyze);
- break;
- case Flag.Persistent:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Private:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Resume:
- commands.Add(Command.MediaDump);
- break;
- case Flag.ResumeFile:
- commands.Add(Command.ImageConvert);
- break;
- case Flag.RetryPasses:
- commands.Add(Command.MediaDump);
- break;
- case Flag.RetrySubchannel:
- commands.Add(Command.MediaDump);
- break;
- case Flag.SectorTags:
- commands.Add(Command.ImageDecode);
- break;
- case Flag.SeparatedTracks:
- commands.Add(Command.ImageChecksum);
- commands.Add(Command.ImageEntropy);
- break;
- case Flag.SHA1:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.SHA256:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.SHA384:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.SHA512:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.Skip:
- commands.Add(Command.MediaDump);
- break;
- case Flag.SkipCdiReadyHole:
- commands.Add(Command.MediaDump);
- break;
- case Flag.SpamSum:
- commands.Add(Command.ImageChecksum);
- break;
- case Flag.Speed:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Start:
- commands.Add(Command.ImageDecode);
- commands.Add(Command.ImagePrint);
- break;
- case Flag.StopOnError:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Subchannel:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Tape:
- commands.Add(Command.ImageCreateSidecar);
- break;
- case Flag.Trim:
- commands.Add(Command.MediaDump);
- break;
- case Flag.Verbose:
- commands.Add(Command.NONE);
- break;
- case Flag.VerifyDisc:
- commands.Add(Command.ImageAnalyze);
- commands.Add(Command.ImageVerify);
- break;
- case Flag.VerifySectors:
- commands.Add(Command.ImageAnalyze);
- commands.Add(Command.ImageVerify);
- break;
- case Flag.Version:
- commands.Add(Command.NONE);
- break;
- case Flag.WholeDisc:
- commands.Add(Command.ImageChecksum);
- commands.Add(Command.ImageEntropy);
- break;
- case Flag.Width:
- commands.Add(Command.ImagePrint);
- break;
- case Flag.XMLSidecar:
- commands.Add(Command.ImageConvert);
- commands.Add(Command.MediaDump);
- break;
-
- case Flag.NONE:
- default:
- return commands;
- }
-
- return commands;
- }
-
- #endregion
-
- #region Process Parameter Helpers
-
- ///
- /// Process a flag parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// True if the parameter was processed successfully or skipped, false otherwise
- private bool ProcessFlagParameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
- return false;
-
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return false;
-
- this[flag] = true;
- }
-
- return true;
- }
-
- ///
- /// Process a boolean parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// True if the parameter was processed successfully or skipped, false otherwise
- private bool ProcessBooleanParameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
- return false;
-
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return false;
- else if (!DoesExist(parts, i + 1))
- return false;
- else if (!IsValidBool(parts[i + 1]))
- return false;
-
- this[flag] = bool.Parse(parts[i + 1]);
- i++;
- }
-
- return true;
- }
-
- ///
- /// Process an sbyte parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// SByte value if success, Int16.MinValue if skipped, null on error/returns>
- private sbyte? ProcessInt8Parameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
+ // Invalid start means invalid command
+ if (start < 0 || start >= parts.Count)
return null;
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
- else if (!DoesExist(parts, i + 1))
- return null;
- else if (!IsValidInt8(parts[i + 1]))
- return null;
+ string partOne = parts[start];
+ string partTwo = string.Empty;
+ if (start + 1 < parts.Count)
+ partTwo = parts[start + 1];
- this[flag] = true;
- i++;
- return sbyte.Parse(parts[i]);
- }
+ string normalized = NormalizeCommand($"{partOne} {partTwo}".Trim());
- return SByte.MinValue;
+ // Null normalization means invalid command
+ if (normalized == null)
+ return null;
+
+ // Determine if start should be incremented
+ if (normalized.Split(' ').Length > 1)
+ start++;
+
+ return normalized;
}
///
- /// Process an Int16 parameter
+ /// Normalize a command string to use long form values for easier lookup
///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// Int16 value if success, Int16.MinValue if skipped, null on error/returns>
- private short? ProcessInt16Parameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
+ /// Command string to normalize
+ /// Normalized command
+ private string NormalizeCommand(string baseCommand)
{
- if (parts == null)
+ // If the base command is inavlid, just return nulls
+ if (string.IsNullOrWhiteSpace(baseCommand))
return null;
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
- else if (!DoesExist(parts, i + 1))
- return null;
- else if (!IsValidInt16(parts[i + 1]))
- return null;
+ // Split the command otherwise
+ string[] splitCommand = baseCommand.Split(' ');
+ string family, command;
- this[flag] = true;
- i++;
- return short.Parse(parts[i]);
+
+ // For commands with a family
+ if (splitCommand.Length > 1)
+ {
+ // Handle the family first
+ switch (splitCommand[0])
+ {
+ case CommandStrings.DatabasePrefixShort:
+ case CommandStrings.DatabasePrefixLong:
+ family = CommandStrings.DatabasePrefixLong;
+ switch (splitCommand[1])
+ {
+ case CommandStrings.DatabaseStats:
+ command = CommandStrings.DatabaseStats;
+ break;
+ case CommandStrings.DatabaseUpdate:
+ command = CommandStrings.DatabaseUpdate;
+ break;
+ default:
+ command = null;
+ break;
+ }
+
+ break;
+
+ case CommandStrings.DevicePrefixShort:
+ case CommandStrings.DevicePrefixLong:
+ family = CommandStrings.DevicePrefixLong;
+ switch (splitCommand[1])
+ {
+ case CommandStrings.DeviceInfo:
+ command = CommandStrings.DeviceInfo;
+ break;
+ case CommandStrings.DeviceList:
+ command = CommandStrings.DeviceList;
+ break;
+ case CommandStrings.DeviceReport:
+ command = CommandStrings.DeviceReport;
+ break;
+ default:
+ command = null;
+ break;
+ }
+
+ break;
+
+ case CommandStrings.FilesystemPrefixShort:
+ case CommandStrings.FilesystemPrefixShortAlt:
+ case CommandStrings.FilesystemPrefixLong:
+ family = CommandStrings.FilesystemPrefixLong;
+ switch (splitCommand[1])
+ {
+ case CommandStrings.FilesystemExtract:
+ command = CommandStrings.FilesystemExtract;
+ break;
+ case CommandStrings.FilesystemListShort:
+ case CommandStrings.FilesystemListLong:
+ command = CommandStrings.FilesystemListLong;
+ break;
+ case CommandStrings.FilesystemOptions:
+ command = CommandStrings.FilesystemOptions;
+ break;
+ default:
+ command = null;
+ break;
+ }
+
+ break;
+
+ case CommandStrings.ImagePrefixShort:
+ case CommandStrings.ImagePrefixLong:
+ family = CommandStrings.DevicePrefixLong;
+ switch (splitCommand[1])
+ {
+ case CommandStrings.ImageAnalyze:
+ command = CommandStrings.ImageAnalyze;
+ break;
+ case CommandStrings.ImageChecksumShort:
+ case CommandStrings.ImageChecksumLong:
+ command = CommandStrings.ImageChecksumLong;
+ break;
+ case CommandStrings.ImageCompareShort:
+ case CommandStrings.ImageCompareLong:
+ command = CommandStrings.ImageChecksumLong;
+ break;
+ case CommandStrings.ImageConvert:
+ command = CommandStrings.ImageConvert;
+ break;
+ case CommandStrings.ImageCreateSidecar:
+ command = CommandStrings.ImageCreateSidecar;
+ break;
+ case CommandStrings.ImageDecode:
+ command = CommandStrings.ImageDecode;
+ break;
+ case CommandStrings.ImageEntropy:
+ command = CommandStrings.ImageEntropy;
+ break;
+ case CommandStrings.ImageInfo:
+ command = CommandStrings.ImageInfo;
+ break;
+ case CommandStrings.ImageOptions:
+ command = CommandStrings.ImageOptions;
+ break;
+ case CommandStrings.ImagePrint:
+ command = CommandStrings.ImagePrint;
+ break;
+ case CommandStrings.ImageVerify:
+ command = CommandStrings.ImageVerify;
+ break;
+ default:
+ command = null;
+ break;
+ }
+
+ break;
+
+ case CommandStrings.MediaPrefixShort:
+ case CommandStrings.MediaPrefixLong:
+ family = CommandStrings.DevicePrefixLong;
+ switch (splitCommand[1])
+ {
+ case CommandStrings.MediaDump:
+ command = CommandStrings.MediaDump;
+ break;
+ case CommandStrings.MediaInfo:
+ command = CommandStrings.MediaInfo;
+ break;
+ case CommandStrings.MediaScan:
+ command = CommandStrings.MediaScan;
+ break;
+ default:
+ command = null;
+ break;
+ }
+
+ break;
+
+ default:
+ family = null;
+ command = null;
+ break;
+ }
}
- return Int16.MinValue;
- }
+ // For standalone commands
+ else
+ {
+ family = null;
+ switch (splitCommand[0])
+ {
+ case CommandStrings.Configure:
+ command = CommandStrings.Configure;
+ break;
+ case CommandStrings.Formats:
+ command = CommandStrings.Formats;
+ break;
+ case CommandStrings.ListEncodings:
+ command = CommandStrings.ListEncodings;
+ break;
+ case CommandStrings.ListNamespaces:
+ command = CommandStrings.ListNamespaces;
+ break;
+ case CommandStrings.Remote:
+ command = CommandStrings.Remote;
+ break;
+ default:
+ command = null;
+ break;
+ }
+ }
- ///
- /// Process an Int32 parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// Int32 value if success, Int32.MinValue if skipped, null on error/returns>
- private int? ProcessInt32Parameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
+ // If the command itself is invalid, then return null
+ if (string.IsNullOrWhiteSpace(command))
return null;
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
- else if (!DoesExist(parts, i + 1))
- return null;
- else if (!IsValidInt32(parts[i + 1]))
- return null;
-
- this[flag] = true;
- i++;
- return int.Parse(parts[i]);
- }
-
- return Int32.MinValue;
- }
-
- ///
- /// Process an Int64 parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// Int64 value if success, Int64.MinValue if skipped, null on error/returns>
- private long? ProcessInt64Parameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
- return null;
-
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
- else if (!DoesExist(parts, i + 1))
- return null;
- else if (!IsValidInt64(parts[i + 1]))
- return null;
-
- this[flag] = true;
- i++;
- return long.Parse(parts[i]);
- }
-
- return Int64.MinValue;
- }
-
- ///
- /// Process a string parameter
- ///
- /// List of parts to be referenced
- /// Short flag string, if available
- /// Long flag string, if available
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// String value if possible, string.Empty on missing, null on error
- private string ProcessStringParameter(List parts, string shortFlagString, string longFlagString, Flag flag, ref int i)
- {
- if (parts == null)
- return null;
-
- if (parts[i] == shortFlagString || parts[i] == longFlagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
- else if (!DoesExist(parts, i + 1))
- return null;
- else if (string.IsNullOrWhiteSpace(parts[i + 1]))
- return null;
-
- this[flag] = true;
- i++;
- return parts[i].Trim('"');
- }
-
- return string.Empty;
+ // Combine the result
+ if (!string.IsNullOrWhiteSpace(family))
+ return $"{family} {command}";
+ else
+ return command;
}
#endregion
@@ -2912,7 +2930,7 @@ namespace MPF.Aaru
dmihash = checksum.Value;
break;
}
- }
+ }
}
}
diff --git a/MPF.Library/CleanRIp/Parameters.cs b/MPF.Library/CleanRIp/Parameters.cs
index 84008c0c..00ecb9ac 100644
--- a/MPF.Library/CleanRIp/Parameters.cs
+++ b/MPF.Library/CleanRIp/Parameters.cs
@@ -3,7 +3,6 @@ using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using MPF.Data;
-using MPF.Utilities;
namespace MPF.CleanRip
{
diff --git a/MPF.Library/DD/Constants.cs b/MPF.Library/DD/Constants.cs
index b675770f..487677ff 100644
--- a/MPF.Library/DD/Constants.cs
+++ b/MPF.Library/DD/Constants.cs
@@ -5,6 +5,7 @@ namespace MPF.DD
///
public static class CommandStrings
{
+ public const string NONE = "";
public const string List = "--list";
}
diff --git a/MPF.Library/DD/Converters.cs b/MPF.Library/DD/Converters.cs
index 38e2fb40..a59ae0fc 100644
--- a/MPF.Library/DD/Converters.cs
+++ b/MPF.Library/DD/Converters.cs
@@ -18,87 +18,5 @@ namespace MPF.DD
}
#endregion
-
- #region Convert to Long Name
-
- ///
- /// Get the string representation of the Command enum values
- ///
- /// Command value to convert
- /// String representing the value, if possible
- public static string LongName(Command command)
- {
- switch (command)
- {
- case Command.List:
- return CommandStrings.List;
-
- case Command.NONE:
- default:
- return "";
- }
- }
-
- ///
- /// Get the string representation of the Flag enum values
- ///
- /// Flag value to convert
- /// String representing the value, if possible
- public static string LongName(Flag flag)
- {
- switch (flag)
- {
- // Boolean flags
- case Flag.Progress:
- return FlagStrings.Progress;
- case Flag.Size:
- return FlagStrings.Size;
-
- // Int64 flags
- case Flag.BlockSize:
- return FlagStrings.BlockSize;
- case Flag.Count:
- return FlagStrings.Count;
- case Flag.Seek:
- return FlagStrings.Seek;
- case Flag.Skip:
- return FlagStrings.Skip;
-
- // String flags
- case Flag.Filter:
- return FlagStrings.Filter;
- case Flag.InputFile:
- return FlagStrings.InputFile;
- case Flag.OutputFile:
- return FlagStrings.OutputFile;
-
- case Flag.NONE:
- default:
- return "";
- }
- }
-
- #endregion
-
- #region Convert From String
-
- ///
- /// Get the Command enum value for a given string
- ///
- /// String value to convert
- /// Command represented by the string(s), if possible
- public static Command StringToCommand(string command)
- {
- switch (command)
- {
- case CommandStrings.List:
- return Command.List;
-
- default:
- return Command.NONE;
- }
- }
-
- #endregion
}
}
\ No newline at end of file
diff --git a/MPF.Library/DD/Enumerations.cs b/MPF.Library/DD/Enumerations.cs
deleted file mode 100644
index a4968d36..00000000
--- a/MPF.Library/DD/Enumerations.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-namespace MPF.DD
-{
- ///
- /// Supported DD commands
- ///
- public enum Command: int
- {
- NONE = 0, // For DD, this represents a normal dump
- List,
- }
-
- ///
- /// Supported DD flags
- ///
- public enum Flag : int
- {
- NONE = 0,
-
- // Boolean flags
- Progress,
- Size,
-
- // Int64 flags
- BlockSize,
- Count,
- Seek,
- Skip,
-
- // String flags
- Filter,
- InputFile,
- OutputFile,
- }
-}
\ No newline at end of file
diff --git a/MPF.Library/DD/Parameters.cs b/MPF.Library/DD/Parameters.cs
index bf102d11..fab708fd 100644
--- a/MPF.Library/DD/Parameters.cs
+++ b/MPF.Library/DD/Parameters.cs
@@ -1,10 +1,8 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using MPF.Data;
-using MPF.Utilities;
namespace MPF.DD
{
@@ -16,7 +14,7 @@ namespace MPF.DD
#region Generic Dumping Information
///
- public override string InputPath => InputFileValue;
+ public override string InputPath => InputFileValue?.TrimStart('\\', '?');
///
public override string OutputPath => OutputFileValue;
@@ -33,36 +31,11 @@ namespace MPF.DD
#region Metadata
- ///
- /// Base command to run
- ///
- public Command BaseCommand { get; set; }
-
///
public override InternalProgram InternalProgram => InternalProgram.DD;
#endregion
- ///
- /// Set of flags to pass to the executable
- ///
- protected Dictionary _flags = new Dictionary();
- public bool? this[Flag key]
- {
- get
- {
- if (_flags.ContainsKey(key))
- return _flags[key];
-
- return null;
- }
- set
- {
- _flags[key] = value;
- }
- }
- protected internal IEnumerable Keys => _flags.Keys;
-
#region Flag Values
public long? BlockSizeValue { get; set; }
@@ -161,23 +134,26 @@ namespace MPF.DD
{
List parameters = new List();
- if (BaseCommand != Command.NONE)
- parameters.Add(Converters.LongName(BaseCommand));
+ if (BaseCommand == null)
+ BaseCommand = CommandStrings.NONE;
+
+ if (!string.IsNullOrEmpty(BaseCommand))
+ parameters.Add(BaseCommand);
#region Boolean flags
// Progress
- if (GetSupportedCommands(Flag.Progress).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Progress))
{
- if (this[Flag.Progress] == true)
- parameters.Add($"{this[Flag.Progress]}");
+ if (this[FlagStrings.Progress] == true)
+ parameters.Add($"{FlagStrings.Progress}");
}
// Size
- if (GetSupportedCommands(Flag.Size).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Size))
{
- if (this[Flag.Size] == true)
- parameters.Add($"{this[Flag.Size]}");
+ if (this[FlagStrings.Size] == true)
+ parameters.Add($"{FlagStrings.Size}");
}
#endregion
@@ -185,31 +161,31 @@ namespace MPF.DD
#region Int64 flags
// Block Size
- if (GetSupportedCommands(Flag.BlockSize).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.BlockSize))
{
- if (this[Flag.BlockSize] == true && BlockSizeValue != null)
- parameters.Add($"{Converters.LongName(Flag.BlockSize)}={BlockSizeValue}");
+ if (this[FlagStrings.BlockSize] == true && BlockSizeValue != null)
+ parameters.Add($"{FlagStrings.BlockSize}={BlockSizeValue}");
}
// Count
- if (GetSupportedCommands(Flag.Count).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Count))
{
- if (this[Flag.Count] == true && CountValue != null)
- parameters.Add($"{Converters.LongName(Flag.Count)}={CountValue}");
+ if (this[FlagStrings.Count] == true && CountValue != null)
+ parameters.Add($"{FlagStrings.Count}={CountValue}");
}
// Seek
- if (GetSupportedCommands(Flag.Seek).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Seek))
{
- if (this[Flag.Seek] == true && SeekValue != null)
- parameters.Add($"{Converters.LongName(Flag.Seek)}={SeekValue}");
+ if (this[FlagStrings.Seek] == true && SeekValue != null)
+ parameters.Add($"{FlagStrings.Seek}={SeekValue}");
}
// Skip
- if (GetSupportedCommands(Flag.Skip).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Skip))
{
- if (this[Flag.Skip] == true && SkipValue != null)
- parameters.Add($"{Converters.LongName(Flag.Skip)}={SkipValue}");
+ if (this[FlagStrings.Skip] == true && SkipValue != null)
+ parameters.Add($"{FlagStrings.Skip}={SkipValue}");
}
#endregion
@@ -217,33 +193,57 @@ namespace MPF.DD
#region String flags
// Filter
- if (GetSupportedCommands(Flag.Filter).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Filter))
{
- if (this[Flag.Filter] == true && FilterValue != null)
- parameters.Add($"{Converters.LongName(Flag.Filter)}={FilterValue}");
+ if (this[FlagStrings.Filter] == true && FilterValue != null)
+ parameters.Add($"{FlagStrings.Filter}={FilterValue}");
}
// Input File
- if (GetSupportedCommands(Flag.InputFile).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.InputFile))
{
- if (this[Flag.InputFile] == true && InputFileValue != null)
- parameters.Add($"{Converters.LongName(Flag.InputFile)}={InputFileValue}");
+ if (this[FlagStrings.InputFile] == true && InputFileValue != null)
+ parameters.Add($"{FlagStrings.InputFile}=\"{InputFileValue}\"");
else
return null;
}
// Output File
- if (GetSupportedCommands(Flag.OutputFile).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.OutputFile))
{
- if (this[Flag.OutputFile] == true && OutputFileValue != null)
- parameters.Add($"{Converters.LongName(Flag.OutputFile)}={OutputFileValue}");
+ if (this[FlagStrings.OutputFile] == true && OutputFileValue != null)
+ parameters.Add($"{FlagStrings.OutputFile}=\"{OutputFileValue}\"");
else
return null;
}
#endregion
- return string.Empty;
+ return string.Join(" ", parameters);
+ }
+
+ ///
+ public override Dictionary> GetCommandSupport()
+ {
+ return new Dictionary>()
+ {
+ [CommandStrings.NONE] = new List()
+ {
+ FlagStrings.BlockSize,
+ FlagStrings.Count,
+ FlagStrings.Filter,
+ FlagStrings.InputFile,
+ FlagStrings.OutputFile,
+ FlagStrings.Progress,
+ FlagStrings.Seek,
+ FlagStrings.Size,
+ FlagStrings.Skip,
+ },
+
+ [CommandStrings.List] = new List()
+ {
+ },
+ };
}
///
@@ -254,7 +254,7 @@ namespace MPF.DD
{
switch (this.BaseCommand)
{
- case Command.List:
+ case CommandStrings.List:
return false;
default:
return true;
@@ -264,9 +264,9 @@ namespace MPF.DD
///
protected override void ResetValues()
{
- BaseCommand = Command.NONE;
+ BaseCommand = CommandStrings.NONE;
- _flags = new Dictionary();
+ flags = new Dictionary();
BlockSizeValue = null;
CountValue = null;
@@ -279,16 +279,16 @@ namespace MPF.DD
///
protected override void SetDefaultParameters(char driveLetter, string filename, int? driveSpeed, Options options)
{
- BaseCommand = Command.NONE;
+ BaseCommand = CommandStrings.NONE;
- this[Flag.InputFile] = true;
+ this[FlagStrings.InputFile] = true;
InputFileValue = $"\\\\?\\{driveLetter}:";
- this[Flag.OutputFile] = true;
+ this[FlagStrings.OutputFile] = true;
OutputFileValue = filename;
// TODO: Add more common block sizes
- this[Flag.BlockSize] = true;
+ this[FlagStrings.BlockSize] = true;
switch (this.Type)
{
case MediaType.FloppyDisk:
@@ -300,13 +300,15 @@ namespace MPF.DD
break;
}
- this[Flag.Progress] = true;
- this[Flag.Size] = true;
+ this[FlagStrings.Progress] = true;
+ this[FlagStrings.Size] = true;
}
///
protected override bool ValidateAndSetParameters(string parameters)
{
+ BaseCommand = CommandStrings.NONE;
+
// The string has to be valid by itself first
if (string.IsNullOrWhiteSpace(parameters))
return false;
@@ -321,13 +323,14 @@ namespace MPF.DD
// Determine what the commandline should look like given the first item
int start = 0;
- BaseCommand = Converters.StringToCommand(parts[0]);
- if (BaseCommand != Command.NONE)
+ if (parts[0] == CommandStrings.List)
+ {
+ BaseCommand = parts[0];
start = 1;
+ }
// Loop through all auxilary flags, if necessary
- int i = 0;
- for (i = start; i < parts.Count; i++)
+ for (int i = start; i < parts.Count; i++)
{
// Flag read-out values
long? longValue = null;
@@ -339,41 +342,33 @@ namespace MPF.DD
#region Boolean flags
// Progress
- ProcessBooleanParameter(parts, FlagStrings.Progress, Flag.Progress, ref i);
+ ProcessFlagParameter(parts, FlagStrings.Progress, ref i);
// Size
- ProcessBooleanParameter(parts, FlagStrings.Size, Flag.Size, ref i);
+ ProcessFlagParameter(parts, FlagStrings.Size, ref i);
#endregion
#region Int64 flags
// Block Size
- longValue = ProcessInt64Parameter(parts, FlagStrings.BlockSize, Flag.BlockSize, ref i);
- if (longValue == Int64.MinValue)
- return false;
- else if (longValue != null)
+ longValue = ProcessInt64Parameter(parts, FlagStrings.BlockSize, ref i);
+ if (longValue != null)
BlockSizeValue = longValue;
// Count
- longValue = ProcessInt64Parameter(parts, FlagStrings.Count, Flag.Count, ref i);
- if (longValue == Int64.MinValue)
- return false;
- else if (longValue != null)
+ longValue = ProcessInt64Parameter(parts, FlagStrings.Count, ref i);
+ if (longValue != null)
CountValue = longValue;
// Seek
- longValue = ProcessInt64Parameter(parts, FlagStrings.Seek, Flag.Seek, ref i);
- if (longValue == Int64.MinValue)
- return false;
- else if (longValue != null)
+ longValue = ProcessInt64Parameter(parts, FlagStrings.Seek, ref i);
+ if (longValue != null)
SeekValue = longValue;
// Skip
- longValue = ProcessInt64Parameter(parts, FlagStrings.Skip, Flag.Skip, ref i);
- if (longValue == Int64.MinValue)
- return false;
- else if (longValue != null)
+ longValue = ProcessInt64Parameter(parts, FlagStrings.Skip, ref i);
+ if (longValue != null)
SkipValue = longValue;
#endregion
@@ -381,22 +376,18 @@ namespace MPF.DD
#region String flags
// Filter (fixed, removable, disk, partition)
- stringValue = ProcessStringParameter(parts, FlagStrings.Filter, Flag.Filter, ref i);
+ stringValue = ProcessStringParameter(parts, FlagStrings.Filter, ref i);
if (!string.IsNullOrEmpty(stringValue))
FilterValue = stringValue;
// Input File
- stringValue = ProcessStringParameter(parts, FlagStrings.InputFile, Flag.InputFile, ref i);
- if (string.Equals(stringValue, string.Empty))
- return false;
- else if (stringValue != null)
+ stringValue = ProcessStringParameter(parts, FlagStrings.InputFile, ref i);
+ if (!string.IsNullOrEmpty(stringValue))
InputFileValue = stringValue;
// Output File
- stringValue = ProcessStringParameter(parts, FlagStrings.OutputFile, Flag.OutputFile, ref i);
- if (string.Equals(stringValue, string.Empty))
- return false;
- else if (stringValue != null)
+ stringValue = ProcessStringParameter(parts, FlagStrings.OutputFile, ref i);
+ if (!string.IsNullOrEmpty(stringValue))
OutputFileValue = stringValue;
#endregion
@@ -406,212 +397,5 @@ namespace MPF.DD
}
#endregion
-
- #region Private Extra Methods
-
- ///
- /// Get the list of commands that use a given flag
- ///
- /// Flag value to get commands for
- /// List of Commands, if possible
- private static List GetSupportedCommands(Flag flag)
- {
- var commands = new List();
- switch (flag)
- {
- #region Boolean flags
-
- case Flag.Progress:
- commands.Add(Command.NONE);
- break;
- case Flag.Size:
- commands.Add(Command.NONE);
- break;
-
- #endregion
-
- #region Int64 flags
-
- case Flag.BlockSize:
- commands.Add(Command.NONE);
- break;
- case Flag.Count:
- commands.Add(Command.NONE);
- break;
- case Flag.Seek:
- commands.Add(Command.NONE);
- break;
- case Flag.Skip:
- commands.Add(Command.NONE);
- break;
-
- #endregion
-
- #region String flags
-
- case Flag.Filter:
- commands.Add(Command.NONE);
- break;
- case Flag.InputFile:
- commands.Add(Command.NONE);
- break;
- case Flag.OutputFile:
- commands.Add(Command.NONE);
- break;
-
- #endregion
-
- case Flag.NONE:
- default:
- return commands;
- }
-
- return commands;
- }
-
- #endregion
-
- #region Process Parameter Helpers
-
- ///
- /// Process a boolean parameter
- ///
- /// List of parts to be referenced
- /// Flag string to check
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// True if the parameter was processed successfully or skipped, false otherwise
- private bool ProcessBooleanParameter(List parts, string flagString, Flag flag, ref int i)
- {
- if (parts == null)
- return false;
-
- if (parts[i] == flagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return false;
-
- this[flag] = true;
- }
-
- return true;
- }
-
- ///
- /// Process an Int64 parameter
- ///
- /// List of parts to be referenced
- /// Flag string to check
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// Int64 value if success, Int64.MinValue if skipped, null on error/returns>
- private long? ProcessInt64Parameter(List parts, string flagString, Flag flag, ref int i)
- {
- if (parts == null)
- return null;
-
- if (parts[i].StartsWith(flagString))
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
-
- string[] commandParts = parts[i].Split('=');
- if (commandParts.Length != 2)
- return null;
-
- string valuePart = commandParts[1];
- long factor = 1;
-
- // Characters
- if (valuePart.EndsWith("c", StringComparison.Ordinal))
- {
- factor = 1;
- valuePart.TrimEnd('c');
- }
-
- // Words
- else if (valuePart.EndsWith("w", StringComparison.Ordinal))
- {
- factor = 2;
- valuePart.TrimEnd('w');
- }
-
- // Double Words
- else if (valuePart.EndsWith("d", StringComparison.Ordinal))
- {
- factor = 4;
- valuePart.TrimEnd('d');
- }
-
- // Quad Words
- else if (valuePart.EndsWith("q", StringComparison.Ordinal))
- {
- factor = 8;
- valuePart.TrimEnd('q');
- }
-
- // Kilobytes
- else if (valuePart.EndsWith("k", StringComparison.Ordinal))
- {
- factor = 1024;
- valuePart.TrimEnd('k');
- }
-
- // Megabytes
- else if (valuePart.EndsWith("M", StringComparison.Ordinal))
- {
- factor = 1024 * 1024;
- valuePart.TrimEnd('M');
- }
-
- // Gigabytes
- else if (valuePart.EndsWith("G", StringComparison.Ordinal))
- {
- factor = 1024 * 1024 * 1024;
- valuePart.TrimEnd('G');
- }
-
- if (!IsValidInt64(valuePart))
- return null;
-
- this[flag] = true;
- return long.Parse(valuePart) * factor;
- }
-
- return Int64.MinValue;
- }
-
- ///
- /// Process a string parameter
- ///
- /// List of parts to be referenced
- /// Flag string to check
- /// Flag value corresponding to the flag
- /// Reference to the position in the parts
- /// String value if possible, string.Empty on missing, null on error
- private string ProcessStringParameter(List parts, string flagString, Flag flag, ref int i)
- {
- if (parts == null)
- return null;
-
- if (parts[i] == flagString)
- {
- if (!GetSupportedCommands(flag).Contains(BaseCommand))
- return null;
-
- string[] commandParts = parts[i].Split('=');
- if (commandParts.Length != 2)
- return null;
-
- string valuePart = commandParts[1];
-
- this[flag] = true;
- return valuePart.Trim('"');
- }
-
- return string.Empty;
- }
-
- #endregion
}
}
diff --git a/MPF.Library/Data/BaseParameters.cs b/MPF.Library/Data/BaseParameters.cs
index 883c9854..5f297a68 100644
--- a/MPF.Library/Data/BaseParameters.cs
+++ b/MPF.Library/Data/BaseParameters.cs
@@ -34,6 +34,49 @@ namespace MPF.Data
#region Generic Dumping Information
+ ///
+ /// Base command to run
+ ///
+ public string BaseCommand { get; set; }
+
+ ///
+ /// Set of flags to pass to the executable
+ ///
+ protected Dictionary flags = new Dictionary();
+ protected internal IEnumerable Keys => flags.Keys;
+
+ ///
+ /// Safe access to currently set flags
+ ///
+ public bool? this[string key]
+ {
+ get
+ {
+ if (flags.ContainsKey(key))
+ return flags[key];
+
+ return null;
+ }
+ set
+ {
+ flags[key] = value;
+ }
+ }
+
+ ///
+ /// Process to track external program
+ ///
+ private Process process;
+
+ #endregion
+
+ #region Virtual Dumping Information
+
+ ///
+ /// Command to flag support mappings
+ ///
+ public Dictionary> CommandSupport => GetCommandSupport();
+
///
/// Input path for operations
///
@@ -50,11 +93,6 @@ namespace MPF.Data
///
public virtual int? Speed { get; set; } = null;
- ///
- /// Process to track external program
- ///
- private Process process;
-
#endregion
#region Metadata
@@ -130,6 +168,12 @@ namespace MPF.Data
#region Virtual Methods
+ ///
+ /// Get all commands mapped to the supported flags
+ ///
+ /// Mappings from command to supported flags
+ public virtual Dictionary> GetCommandSupport() => null;
+
///
/// Blindly generate a parameter string based on the inputs
///
@@ -162,6 +206,22 @@ namespace MPF.Data
/// True if it's a dumping command, false otherwise
public virtual bool IsDumpingCommand() => true;
+ ///
+ /// Gets if the flag is supported by the current command
+ ///
+ /// Flag value to check
+ /// True if the flag value is supported, false otherwise
+ public virtual bool IsFlagSupported(string flag)
+ {
+ if (CommandSupport == null)
+ return false;
+ if (this.BaseCommand == null)
+ return false;
+ if (!CommandSupport.ContainsKey(this.BaseCommand))
+ return false;
+ return CommandSupport[this.BaseCommand].Contains(flag);
+ }
+
///
/// Returns if the current Parameter object is valid
///
@@ -311,7 +371,10 @@ namespace MPF.Data
/// True if it's a flag, false otherwise
protected static bool IsFlag(string parameter)
{
- if (parameter.Trim('\"').StartsWith("/"))
+ parameter = parameter.Trim('\"');
+ if (parameter.StartsWith("/"))
+ return true;
+ else if (parameter.StartsWith("-"))
return true;
return false;
@@ -349,7 +412,8 @@ namespace MPF.Data
/// True if it's a valid byte, false otherwise
protected static bool IsValidInt8(string parameter, sbyte lowerBound = -1, sbyte upperBound = -1)
{
- if (!sbyte.TryParse(parameter, out sbyte temp))
+ (string value, long _) = ExtractFactorFromValue(parameter);
+ if (!sbyte.TryParse(value, out sbyte temp))
return false;
else if (lowerBound != -1 && temp < lowerBound)
return false;
@@ -368,7 +432,8 @@ namespace MPF.Data
/// True if it's a valid Int16, false otherwise
protected static bool IsValidInt16(string parameter, short lowerBound = -1, short upperBound = -1)
{
- if (!short.TryParse(parameter, out short temp))
+ (string value, long _) = ExtractFactorFromValue(parameter);
+ if (!short.TryParse(value, out short temp))
return false;
else if (lowerBound != -1 && temp < lowerBound)
return false;
@@ -387,7 +452,8 @@ namespace MPF.Data
/// True if it's a valid Int32, false otherwise
protected static bool IsValidInt32(string parameter, int lowerBound = -1, int upperBound = -1)
{
- if (!int.TryParse(parameter, out int temp))
+ (string value, long _) = ExtractFactorFromValue(parameter);
+ if (!int.TryParse(value, out int temp))
return false;
else if (lowerBound != -1 && temp < lowerBound)
return false;
@@ -406,7 +472,8 @@ namespace MPF.Data
/// True if it's a valid Int64, false otherwise
protected static bool IsValidInt64(string parameter, long lowerBound = -1, long upperBound = -1)
{
- if (!long.TryParse(parameter, out long temp))
+ (string value, long _) = ExtractFactorFromValue(parameter);
+ if (!long.TryParse(value, out long temp))
return false;
else if (lowerBound != -1 && temp < lowerBound)
return false;
@@ -416,6 +483,571 @@ namespace MPF.Data
return true;
}
+ ///
+ /// Process a flag parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if the parameter was processed successfully or skipped, false otherwise
+ protected bool ProcessFlagParameter(List parts, string flagString, ref int i)
+ {
+ return ProcessFlagParameter(parts, null, flagString, ref i);
+ }
+
+ ///
+ /// Process a flag parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if the parameter was processed successfully or skipped, false otherwise
+ protected bool ProcessFlagParameter(List parts, string shortFlagString, string longFlagString, ref int i)
+ {
+ if (parts == null)
+ return false;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ return false;
+
+ this[longFlagString] = true;
+ }
+
+ return true;
+ }
+
+ ///
+ /// Process a boolean parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// True if the parameter was processed successfully or skipped, false otherwise
+ protected bool ProcessBooleanParameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessBooleanParameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process a boolean parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// True if the parameter was processed successfully or skipped, false otherwise
+ protected bool ProcessBooleanParameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return false;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return false;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ {
+ this[longFlagString] = true;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ {
+ this[longFlagString] = true;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else if (!IsValidBool(parts[i + 1]))
+ {
+ if (missingAllowed)
+ {
+ this[longFlagString] = true;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ this[longFlagString] = bool.Parse(parts[i + 1]);
+ i++;
+ }
+
+ return true;
+ }
+
+ ///
+ /// Process a sbyte parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// SByte value if success, SByte.MinValue if skipped, null on error/returns>
+ protected sbyte? ProcessInt8Parameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessInt8Parameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process an sbyte parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// SByte value if success, SByte.MinValue if skipped, null on error/returns>
+ protected sbyte? ProcessInt8Parameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return null;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return null;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (!IsValidInt8(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+
+ this[longFlagString] = true;
+ i++;
+
+ (string value, long factor) = ExtractFactorFromValue(parts[i]);
+ return (sbyte)(sbyte.Parse(value) * factor);
+ }
+ else if (parts[i].StartsWith(shortFlagString + "=") || parts[i].StartsWith(longFlagString + "="))
+ {
+ if (!IsFlagSupported(longFlagString))
+ return null;
+
+ string[] commandParts = parts[i].Split('=');
+ if (commandParts.Length != 2)
+ return null;
+
+ string valuePart = commandParts[1];
+
+ (string value, long factor) = ExtractFactorFromValue(valuePart);
+ return (sbyte)(sbyte.Parse(value) * factor);
+ }
+
+ return SByte.MinValue;
+ }
+
+ ///
+ /// Process an Int16 parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int16 value if success, Int16.MinValue if skipped, null on error/returns>
+ protected short? ProcessInt16Parameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessInt16Parameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process an Int16 parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int16 value if success, Int16.MinValue if skipped, null on error/returns>
+ protected short? ProcessInt16Parameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return null;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return null;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (!IsValidInt16(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+
+ this[longFlagString] = true;
+ i++;
+ (string value, long factor) = ExtractFactorFromValue(parts[i]);
+ return (short)(short.Parse(value) * factor);
+ }
+ else if (parts[i].StartsWith(shortFlagString + "=") || parts[i].StartsWith(longFlagString + "="))
+ {
+ if (!IsFlagSupported(longFlagString))
+ return null;
+
+ string[] commandParts = parts[i].Split('=');
+ if (commandParts.Length != 2)
+ return null;
+
+ string valuePart = commandParts[1];
+
+ (string value, long factor) = ExtractFactorFromValue(valuePart);
+ return (short)(short.Parse(value) * factor);
+ }
+
+ return Int16.MinValue;
+ }
+
+ ///
+ /// Process an Int32 parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int32 value if success, Int32.MinValue if skipped, null on error/returns>
+ protected int? ProcessInt32Parameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessInt32Parameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process an Int32 parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int32 value if success, Int32.MinValue if skipped, null on error/returns>
+ protected int? ProcessInt32Parameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return null;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return null;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (!IsValidInt32(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+
+ this[longFlagString] = true;
+ i++;
+ (string value, long factor) = ExtractFactorFromValue(parts[i]);
+ return (int)(int.Parse(value) * factor);
+ }
+ else if (parts[i].StartsWith(shortFlagString + "=") || parts[i].StartsWith(longFlagString + "="))
+ {
+ if (!IsFlagSupported(longFlagString))
+ return null;
+
+ string[] commandParts = parts[i].Split('=');
+ if (commandParts.Length != 2)
+ return null;
+
+ string valuePart = commandParts[1];
+
+ (string value, long factor) = ExtractFactorFromValue(valuePart);
+ return (int)(int.Parse(value) * factor);
+ }
+
+ return Int32.MinValue;
+ }
+
+ ///
+ /// Process an Int64 parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int64 value if success, Int64.MinValue if skipped, null on error/returns>
+ protected long? ProcessInt64Parameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessInt64Parameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process an Int64 parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// Int64 value if success, Int64.MinValue if skipped, null on error/returns>
+ protected long? ProcessInt64Parameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return null;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return null;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (!IsValidInt64(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+
+ this[longFlagString] = true;
+ i++;
+ (string value, long factor) = ExtractFactorFromValue(parts[i]);
+ return long.Parse(value) * factor;
+ }
+ else if (parts[i].StartsWith(shortFlagString + "=") || parts[i].StartsWith(longFlagString + "="))
+ {
+ if (!IsFlagSupported(longFlagString))
+ return null;
+
+ string[] commandParts = parts[i].Split('=');
+ if (commandParts.Length != 2)
+ return null;
+
+ string valuePart = commandParts[1];
+
+ (string value, long factor) = ExtractFactorFromValue(valuePart);
+ return long.Parse(value) * factor;
+ }
+
+ return Int64.MinValue;
+ }
+
+ ///
+ /// Process an Int64 parameter
+ ///
+ /// List of parts to be referenced
+ /// Flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// String value if possible, string.Empty on missing, null on error
+ protected string ProcessStringParameter(List parts, string flagString, ref int i, bool missingAllowed = false)
+ {
+ return ProcessStringParameter(parts, null, flagString, ref i, missingAllowed);
+ }
+
+ ///
+ /// Process a string parameter
+ ///
+ /// List of parts to be referenced
+ /// Short flag string, if available
+ /// Long flag string, if available
+ /// Reference to the position in the parts
+ /// True if missing values are allowed, false otherwise
+ /// String value if possible, string.Empty on missing, null on error
+ protected string ProcessStringParameter(List parts, string shortFlagString, string longFlagString, ref int i, bool missingAllowed = false)
+ {
+ if (parts == null)
+ return null;
+
+ if (parts[i] == shortFlagString || parts[i] == longFlagString)
+ {
+ if (!IsFlagSupported(longFlagString))
+ {
+ return null;
+ }
+ else if (!DoesExist(parts, i + 1))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+ else if (string.IsNullOrWhiteSpace(parts[i + 1]))
+ {
+ if (missingAllowed)
+ this[longFlagString] = true;
+
+ return null;
+ }
+
+ this[longFlagString] = true;
+ i++;
+ return parts[i].Trim('"');
+ }
+ else if (parts[i].StartsWith(shortFlagString + "=") || parts[i].StartsWith(longFlagString + "="))
+ {
+ if (!IsFlagSupported(longFlagString))
+ return null;
+
+ string[] commandParts = parts[i].Split('=');
+ if (commandParts.Length != 2)
+ return null;
+
+ string valuePart = commandParts[1];
+
+ this[longFlagString] = true;
+ return valuePart.Trim('"');
+ }
+
+ return string.Empty;
+ }
+
+ ///
+ /// Get yhe trimmed value and multiplication factor from a value
+ ///
+ /// String value to treat as suffixed number
+ /// Trimmed value and multiplication factor
+ private static (string trimmed, long factor) ExtractFactorFromValue(string value)
+ {
+ value = value.Trim('"');
+ long factor = 1;
+
+ // Characters
+ if (value.EndsWith("c", StringComparison.Ordinal))
+ {
+ factor = 1;
+ value = value.TrimEnd('c');
+ }
+
+ // Words
+ else if (value.EndsWith("w", StringComparison.Ordinal))
+ {
+ factor = 2;
+ value = value.TrimEnd('w');
+ }
+
+ // Double Words
+ else if (value.EndsWith("d", StringComparison.Ordinal))
+ {
+ factor = 4;
+ value = value.TrimEnd('d');
+ }
+
+ // Quad Words
+ else if (value.EndsWith("q", StringComparison.Ordinal))
+ {
+ factor = 8;
+ value = value.TrimEnd('q');
+ }
+
+ // Kilobytes
+ else if (value.EndsWith("k", StringComparison.Ordinal))
+ {
+ factor = 1024;
+ value = value.TrimEnd('k');
+ }
+
+ // Megabytes
+ else if (value.EndsWith("M", StringComparison.Ordinal))
+ {
+ factor = 1024 * 1024;
+ value = value.TrimEnd('M');
+ }
+
+ // Gigabytes
+ else if (value.EndsWith("G", StringComparison.Ordinal))
+ {
+ factor = 1024 * 1024 * 1024;
+ value = value.TrimEnd('G');
+ }
+
+ return (value, factor);
+ }
+
#endregion
#region Common Information Extraction
diff --git a/MPF.Library/Data/DumpEnvironment.cs b/MPF.Library/Data/DumpEnvironment.cs
index ee4f735e..0c09a195 100644
--- a/MPF.Library/Data/DumpEnvironment.cs
+++ b/MPF.Library/Data/DumpEnvironment.cs
@@ -320,7 +320,7 @@ namespace MPF.Data
var parameters = new DiscImageCreator.Parameters(string.Empty)
{
- BaseCommand = DiscImageCreator.Command.Eject,
+ BaseCommand = DiscImageCreator.CommandStrings.Eject,
DriveLetter = Drive.Letter.ToString(),
ExecutablePath = Options.DiscImageCreatorPath,
};
@@ -350,7 +350,7 @@ namespace MPF.Data
DiscImageCreator.Parameters parameters = new DiscImageCreator.Parameters(string.Empty)
{
- BaseCommand = DiscImageCreator.Command.Reset,
+ BaseCommand = DiscImageCreator.CommandStrings.Reset,
DriveLetter = Drive.Letter.ToString(),
ExecutablePath = Options.DiscImageCreatorPath,
};
diff --git a/MPF.Library/DiscImageCreator/Constants.cs b/MPF.Library/DiscImageCreator/Constants.cs
index 8faac4ff..82344bb9 100644
--- a/MPF.Library/DiscImageCreator/Constants.cs
+++ b/MPF.Library/DiscImageCreator/Constants.cs
@@ -5,6 +5,7 @@ namespace MPF.DiscImageCreator
///
public static class CommandStrings
{
+ public const string NONE = "";
public const string Audio = "audio";
public const string BluRay = "bd";
public const string Close = "close";
diff --git a/MPF.Library/DiscImageCreator/Converters.cs b/MPF.Library/DiscImageCreator/Converters.cs
index a1b08ca2..836076ea 100644
--- a/MPF.Library/DiscImageCreator/Converters.cs
+++ b/MPF.Library/DiscImageCreator/Converters.cs
@@ -11,31 +11,31 @@ namespace MPF.DiscImageCreator
///
/// Command value to check
/// KnownSystem if possible, null on error
- public static KnownSystem? ToKnownSystem(Command baseCommand)
+ public static KnownSystem? ToKnownSystem(string baseCommand)
{
switch (baseCommand)
{
- case Command.Audio:
+ case CommandStrings.Audio:
return KnownSystem.AudioCD;
- case Command.CompactDisc:
- case Command.Data:
- case Command.DigitalVideoDisc:
- case Command.Disk:
- case Command.Floppy:
- case Command.Tape:
+ case CommandStrings.CompactDisc:
+ case CommandStrings.Data:
+ case CommandStrings.DigitalVideoDisc:
+ case CommandStrings.Disk:
+ case CommandStrings.Floppy:
+ case CommandStrings.Tape:
return KnownSystem.IBMPCCompatible;
- case Command.GDROM:
- case Command.Swap:
+ case CommandStrings.GDROM:
+ case CommandStrings.Swap:
return KnownSystem.SegaDreamcast;
- case Command.BluRay:
+ case CommandStrings.BluRay:
return KnownSystem.SonyPlayStation3;
- case Command.SACD:
+ case CommandStrings.SACD:
return KnownSystem.SuperAudioCD;
- case Command.XBOX:
- case Command.XBOXSwap:
+ case CommandStrings.XBOX:
+ case CommandStrings.XBOXSwap:
return KnownSystem.MicrosoftXBOX;
- case Command.XGD2Swap:
- case Command.XGD3Swap:
+ case CommandStrings.XGD2Swap:
+ case CommandStrings.XGD3Swap:
return KnownSystem.MicrosoftXBOX360;
default:
return null;
@@ -48,33 +48,33 @@ namespace MPF.DiscImageCreator
/// Command value to check
/// MediaType if possible, null on error
/// This takes the "safe" route by assuming the larger of any given format
- public static MediaType? ToMediaType(Command baseCommand)
+ public static MediaType? ToMediaType(string baseCommand)
{
switch (baseCommand)
{
- case Command.Audio:
- case Command.CompactDisc:
- case Command.Data:
- case Command.SACD:
+ case CommandStrings.Audio:
+ case CommandStrings.CompactDisc:
+ case CommandStrings.Data:
+ case CommandStrings.SACD:
return MediaType.CDROM;
- case Command.GDROM:
- case Command.Swap:
+ case CommandStrings.GDROM:
+ case CommandStrings.Swap:
return MediaType.GDROM;
- case Command.DigitalVideoDisc:
- case Command.XBOX:
- case Command.XBOXSwap:
- case Command.XGD2Swap:
- case Command.XGD3Swap:
+ case CommandStrings.DigitalVideoDisc:
+ case CommandStrings.XBOX:
+ case CommandStrings.XBOXSwap:
+ case CommandStrings.XGD2Swap:
+ case CommandStrings.XGD3Swap:
return MediaType.DVD;
- case Command.BluRay:
+ case CommandStrings.BluRay:
return MediaType.BluRay;
// Non-optical
- case Command.Floppy:
+ case CommandStrings.Floppy:
return MediaType.FloppyDisk;
- case Command.Disk:
+ case CommandStrings.Disk:
return MediaType.HardDisk;
- case Command.Tape:
+ case CommandStrings.Tape:
return MediaType.DataCartridge;
default:
return null;
@@ -120,222 +120,5 @@ namespace MPF.DiscImageCreator
}
#endregion
-
- #region Convert to Long Name
-
- ///
- /// Get the string representation of the Command enum values
- ///
- /// Command value to convert
- /// String representing the value, if possible
- public static string LongName(Command command)
- {
- switch (command)
- {
- case Command.Audio:
- return CommandStrings.Audio;
- case Command.BluRay:
- return CommandStrings.BluRay;
- case Command.Close:
- return CommandStrings.Close;
- case Command.CompactDisc:
- return CommandStrings.CompactDisc;
- case Command.Data:
- return CommandStrings.Data;
- case Command.DigitalVideoDisc:
- return CommandStrings.DigitalVideoDisc;
- case Command.Disk:
- return CommandStrings.Disk;
- case Command.DriveSpeed:
- return CommandStrings.DriveSpeed;
- case Command.Eject:
- return CommandStrings.Eject;
- case Command.Floppy:
- return CommandStrings.Floppy;
- case Command.GDROM:
- return CommandStrings.GDROM;
- case Command.MDS:
- return CommandStrings.MDS;
- case Command.Merge:
- return CommandStrings.Merge;
- case Command.Reset:
- return CommandStrings.Reset;
- case Command.SACD:
- return CommandStrings.SACD;
- case Command.Start:
- return CommandStrings.Start;
- case Command.Stop:
- return CommandStrings.Stop;
- case Command.Sub:
- return CommandStrings.Sub;
- case Command.Swap:
- return CommandStrings.Swap;
- case Command.Tape:
- return CommandStrings.Tape;
- case Command.XBOX:
- return CommandStrings.XBOX;
- case Command.XBOXSwap:
- return CommandStrings.XBOXSwap;
- case Command.XGD2Swap:
- return CommandStrings.XGD2Swap;
- case Command.XGD3Swap:
- return CommandStrings.XGD3Swap;
-
- case Command.NONE:
- default:
- return "";
- }
- }
-
- ///
- /// Get the string representation of the Flag enum values
- ///
- /// Flag value to convert
- /// String representing the value, if possible
- public static string LongName(Flag flag)
- {
- switch (flag)
- {
- case Flag.AddOffset:
- return FlagStrings.AddOffset;
- case Flag.AMSF:
- return FlagStrings.AMSF;
- case Flag.AtariJaguar:
- return FlagStrings.AtariJaguar;
- case Flag.BEOpcode:
- return FlagStrings.BEOpcode;
- case Flag.C2Opcode:
- return FlagStrings.C2Opcode;
- case Flag.CopyrightManagementInformation:
- return FlagStrings.CopyrightManagementInformation;
- case Flag.D8Opcode:
- return FlagStrings.D8Opcode;
- case Flag.DisableBeep:
- return FlagStrings.DisableBeep;
- case Flag.ExtractMicroSoftCabFile:
- return FlagStrings.ExtractMicroSoftCabFile;
- case Flag.Fix:
- return FlagStrings.Fix;
- case Flag.ForceUnitAccess:
- return FlagStrings.ForceUnitAccess;
- case Flag.MultiSectorRead:
- return FlagStrings.MultiSectorRead;
- case Flag.MultiSession:
- return FlagStrings.MultiSession;
- case Flag.NoFixSubP:
- return FlagStrings.NoFixSubP;
- case Flag.NoFixSubQ:
- return FlagStrings.NoFixSubQ;
- case Flag.NoFixSubQLibCrypt:
- return FlagStrings.NoFixSubQLibCrypt;
- case Flag.NoFixSubRtoW:
- return FlagStrings.NoFixSubRtoW;
- case Flag.NoFixSubQSecuROM:
- return FlagStrings.NoFixSubQSecuROM;
- case Flag.NoSkipSS:
- return FlagStrings.NoSkipSS;
- case Flag.PadSector:
- return FlagStrings.PadSector;
- case Flag.Raw:
- return FlagStrings.Raw;
- case Flag.Resume:
- return FlagStrings.Resume;
- case Flag.Reverse:
- return FlagStrings.Reverse;
- case Flag.ScanAntiMod:
- return FlagStrings.ScanAntiMod;
- case Flag.ScanFileProtect:
- return FlagStrings.ScanFileProtect;
- case Flag.ScanSectorProtect:
- return FlagStrings.ScanSectorProtect;
- case Flag.SeventyFour:
- return FlagStrings.SeventyFour;
- case Flag.SkipSector:
- return FlagStrings.SkipSector;
- case Flag.SubchannelReadLevel:
- return FlagStrings.SubchannelReadLevel;
- case Flag.UseAnchorVolumeDescriptorPointer:
- return FlagStrings.UseAnchorVolumeDescriptorPointer;
- case Flag.VideoNow:
- return FlagStrings.VideoNow;
- case Flag.VideoNowColor:
- return FlagStrings.VideoNowColor;
- case Flag.VideoNowXP:
- return FlagStrings.VideoNowXP;
-
- case Flag.NONE:
- default:
- return "";
- }
- }
-
- #endregion
-
- #region Convert From String
-
- ///
- /// Get the Command enum value for a given string
- ///
- /// String value to convert
- /// Command represented by the string(s), if possible
- public static Command StringToCommand(string command)
- {
- switch (command)
- {
- case CommandStrings.Audio:
- return Command.Audio;
- case CommandStrings.BluRay:
- return Command.BluRay;
- case CommandStrings.Close:
- return Command.Close;
- case CommandStrings.CompactDisc:
- return Command.CompactDisc;
- case CommandStrings.Data:
- return Command.Data;
- case CommandStrings.DigitalVideoDisc:
- return Command.DigitalVideoDisc;
- case CommandStrings.Disk:
- return Command.Disk;
- case CommandStrings.DriveSpeed:
- return Command.DriveSpeed;
- case CommandStrings.Eject:
- return Command.Eject;
- case CommandStrings.Floppy:
- return Command.Floppy;
- case CommandStrings.GDROM:
- return Command.GDROM;
- case CommandStrings.MDS:
- return Command.MDS;
- case CommandStrings.Merge:
- return Command.Merge;
- case CommandStrings.Reset:
- return Command.Reset;
- case CommandStrings.SACD:
- return Command.SACD;
- case CommandStrings.Start:
- return Command.Start;
- case CommandStrings.Stop:
- return Command.Stop;
- case CommandStrings.Sub:
- return Command.Sub;
- case CommandStrings.Swap:
- return Command.Swap;
- case CommandStrings.Tape:
- return Command.Tape;
- case CommandStrings.XBOX:
- return Command.XBOX;
- case CommandStrings.XBOXSwap:
- return Command.XBOXSwap;
- case CommandStrings.XGD2Swap:
- return Command.XGD2Swap;
- case CommandStrings.XGD3Swap:
- return Command.XGD3Swap;
-
- default:
- return Command.NONE;
- }
- }
-
- #endregion
}
}
\ No newline at end of file
diff --git a/MPF.Library/DiscImageCreator/Enumerations.cs b/MPF.Library/DiscImageCreator/Enumerations.cs
deleted file mode 100644
index a79ebc57..00000000
--- a/MPF.Library/DiscImageCreator/Enumerations.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-namespace MPF.DiscImageCreator
-{
- ///
- /// Supported DiscImageCreator commands
- ///
- public enum Command : int
- {
- NONE = 0,
- Audio,
- BluRay,
- Close,
- CompactDisc,
- Data,
- DigitalVideoDisc,
- Disk,
- DriveSpeed,
- Eject,
- Floppy,
- GDROM,
- MDS,
- Merge,
- Reset,
- SACD,
- Start,
- Stop,
- Sub,
- Swap,
- Tape,
- XBOX,
- XBOXSwap,
- XGD2Swap,
- XGD3Swap,
- }
-
- ///
- /// Supported DiscImageCreator flags
- ///
- public enum Flag : int
- {
- NONE = 0,
- AddOffset,
- AMSF,
- AtariJaguar,
- BEOpcode,
- C2Opcode,
- CopyrightManagementInformation,
- D8Opcode,
- DisableBeep,
- ExtractMicroSoftCabFile,
- Fix,
- ForceUnitAccess,
- MultiSectorRead,
- MultiSession,
- NoFixSubP,
- NoFixSubQ,
- NoFixSubQLibCrypt,
- NoFixSubRtoW,
- NoFixSubQSecuROM,
- NoSkipSS,
- PadSector,
- Raw,
- Resume,
- Reverse,
- ScanAntiMod,
- ScanFileProtect,
- ScanSectorProtect,
- SeventyFour,
- SkipSector,
- SubchannelReadLevel,
- UseAnchorVolumeDescriptorPointer,
- VideoNow,
- VideoNowColor,
- VideoNowXP,
- }
-}
\ No newline at end of file
diff --git a/MPF.Library/DiscImageCreator/Parameters.cs b/MPF.Library/DiscImageCreator/Parameters.cs
index 7175ef0a..3e98faf6 100644
--- a/MPF.Library/DiscImageCreator/Parameters.cs
+++ b/MPF.Library/DiscImageCreator/Parameters.cs
@@ -35,36 +35,11 @@ namespace MPF.DiscImageCreator
#region Metadata
- ///
- /// Base command to run
- ///
- public Command BaseCommand { get; set; }
-
///
public override InternalProgram InternalProgram => InternalProgram.DiscImageCreator;
#endregion
- ///
- /// Set of flags to pass to the executable
- ///
- protected Dictionary _flags = new Dictionary();
- public bool? this[Flag key]
- {
- get
- {
- if (_flags.ContainsKey(key))
- return _flags[key];
-
- return null;
- }
- set
- {
- _flags[key] = value;
- }
- }
- protected internal IEnumerable Keys => _flags.Keys;
-
#region Common Input Values
///
@@ -765,32 +740,35 @@ namespace MPF.DiscImageCreator
{
List parameters = new List();
- if (BaseCommand != Command.NONE)
- parameters.Add(Converters.LongName(BaseCommand));
+ if (BaseCommand == null)
+ BaseCommand = CommandStrings.NONE;
+
+ if (!string.IsNullOrWhiteSpace(BaseCommand))
+ parameters.Add(BaseCommand);
else
return null;
// Drive Letter
- if (BaseCommand == Command.Audio
- || BaseCommand == Command.BluRay
- || BaseCommand == Command.Close
- || BaseCommand == Command.CompactDisc
- || BaseCommand == Command.Data
- || BaseCommand == Command.DigitalVideoDisc
- || BaseCommand == Command.Disk
- || BaseCommand == Command.DriveSpeed
- || BaseCommand == Command.Eject
- || BaseCommand == Command.Floppy
- || BaseCommand == Command.GDROM
- || BaseCommand == Command.Reset
- || BaseCommand == Command.SACD
- || BaseCommand == Command.Start
- || BaseCommand == Command.Stop
- || BaseCommand == Command.Swap
- || BaseCommand == Command.XBOX
- || BaseCommand == Command.XBOXSwap
- || BaseCommand == Command.XGD2Swap
- || BaseCommand == Command.XGD3Swap)
+ if (BaseCommand == CommandStrings.Audio
+ || BaseCommand == CommandStrings.BluRay
+ || BaseCommand == CommandStrings.Close
+ || BaseCommand == CommandStrings.CompactDisc
+ || BaseCommand == CommandStrings.Data
+ || BaseCommand == CommandStrings.DigitalVideoDisc
+ || BaseCommand == CommandStrings.Disk
+ || BaseCommand == CommandStrings.DriveSpeed
+ || BaseCommand == CommandStrings.Eject
+ || BaseCommand == CommandStrings.Floppy
+ || BaseCommand == CommandStrings.GDROM
+ || BaseCommand == CommandStrings.Reset
+ || BaseCommand == CommandStrings.SACD
+ || BaseCommand == CommandStrings.Start
+ || BaseCommand == CommandStrings.Stop
+ || BaseCommand == CommandStrings.Swap
+ || BaseCommand == CommandStrings.XBOX
+ || BaseCommand == CommandStrings.XBOXSwap
+ || BaseCommand == CommandStrings.XGD2Swap
+ || BaseCommand == CommandStrings.XGD3Swap)
{
if (DriveLetter != null)
parameters.Add(DriveLetter);
@@ -799,24 +777,24 @@ namespace MPF.DiscImageCreator
}
// Filename
- if (BaseCommand == Command.Audio
- || BaseCommand == Command.BluRay
- || BaseCommand == Command.CompactDisc
- || BaseCommand == Command.Data
- || BaseCommand == Command.DigitalVideoDisc
- || BaseCommand == Command.Disk
- || BaseCommand == Command.Floppy
- || BaseCommand == Command.GDROM
- || BaseCommand == Command.MDS
- || BaseCommand == Command.Merge
- || BaseCommand == Command.SACD
- || BaseCommand == Command.Swap
- || BaseCommand == Command.Sub
- || BaseCommand == Command.Tape
- || BaseCommand == Command.XBOX
- || BaseCommand == Command.XBOXSwap
- || BaseCommand == Command.XGD2Swap
- || BaseCommand == Command.XGD3Swap)
+ if (BaseCommand == CommandStrings.Audio
+ || BaseCommand == CommandStrings.BluRay
+ || BaseCommand == CommandStrings.CompactDisc
+ || BaseCommand == CommandStrings.Data
+ || BaseCommand == CommandStrings.DigitalVideoDisc
+ || BaseCommand == CommandStrings.Disk
+ || BaseCommand == CommandStrings.Floppy
+ || BaseCommand == CommandStrings.GDROM
+ || BaseCommand == CommandStrings.MDS
+ || BaseCommand == CommandStrings.Merge
+ || BaseCommand == CommandStrings.SACD
+ || BaseCommand == CommandStrings.Swap
+ || BaseCommand == CommandStrings.Sub
+ || BaseCommand == CommandStrings.Tape
+ || BaseCommand == CommandStrings.XBOX
+ || BaseCommand == CommandStrings.XBOXSwap
+ || BaseCommand == CommandStrings.XGD2Swap
+ || BaseCommand == CommandStrings.XGD3Swap)
{
if (Filename != null)
parameters.Add("\"" + Filename.Trim('"') + "\"");
@@ -825,7 +803,7 @@ namespace MPF.DiscImageCreator
}
// Optiarc Filename
- if (BaseCommand == Command.Merge)
+ if (BaseCommand == CommandStrings.Merge)
{
if (OptiarcFilename != null)
parameters.Add("\"" + OptiarcFilename.Trim('"') + "\"");
@@ -834,18 +812,18 @@ namespace MPF.DiscImageCreator
}
// Drive Speed
- if (BaseCommand == Command.Audio
- || BaseCommand == Command.BluRay
- || BaseCommand == Command.CompactDisc
- || BaseCommand == Command.Data
- || BaseCommand == Command.DigitalVideoDisc
- || BaseCommand == Command.GDROM
- || BaseCommand == Command.SACD
- || BaseCommand == Command.Swap
- || BaseCommand == Command.XBOX
- || BaseCommand == Command.XBOXSwap
- || BaseCommand == Command.XGD2Swap
- || BaseCommand == Command.XGD3Swap)
+ if (BaseCommand == CommandStrings.Audio
+ || BaseCommand == CommandStrings.BluRay
+ || BaseCommand == CommandStrings.CompactDisc
+ || BaseCommand == CommandStrings.Data
+ || BaseCommand == CommandStrings.DigitalVideoDisc
+ || BaseCommand == CommandStrings.GDROM
+ || BaseCommand == CommandStrings.SACD
+ || BaseCommand == CommandStrings.Swap
+ || BaseCommand == CommandStrings.XBOX
+ || BaseCommand == CommandStrings.XBOXSwap
+ || BaseCommand == CommandStrings.XGD2Swap
+ || BaseCommand == CommandStrings.XGD3Swap)
{
if (DriveSpeed != null)
parameters.Add(DriveSpeed.ToString());
@@ -854,8 +832,8 @@ namespace MPF.DiscImageCreator
}
// LBA Markers
- if (BaseCommand == Command.Audio
- || BaseCommand == Command.Data)
+ if (BaseCommand == CommandStrings.Audio
+ || BaseCommand == CommandStrings.Data)
{
if (StartLBAValue != null && StartLBAValue > 0
&& EndLBAValue != null && EndLBAValue > 0)
@@ -868,36 +846,36 @@ namespace MPF.DiscImageCreator
}
// Add Offset
- if (GetSupportedCommands(Flag.AddOffset).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.AddOffset))
{
- if (this[Flag.AddOffset] == true)
+ if (this[FlagStrings.AddOffset] == true)
{
- parameters.Add(Converters.LongName(Flag.AddOffset));
+ parameters.Add(FlagStrings.AddOffset);
if (AddOffsetValue != null)
parameters.Add(AddOffsetValue.ToString());
}
}
// AMSF Dumping
- if (GetSupportedCommands(Flag.AMSF).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.AMSF))
{
- if (this[Flag.AMSF] == true)
- parameters.Add(Converters.LongName(Flag.AMSF));
+ if (this[FlagStrings.AMSF] == true)
+ parameters.Add(FlagStrings.AMSF);
}
// Atari Jaguar CD
- if (GetSupportedCommands(Flag.AtariJaguar).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.AtariJaguar))
{
- if (this[Flag.AtariJaguar] == true)
- parameters.Add(Converters.LongName(Flag.AtariJaguar));
+ if (this[FlagStrings.AtariJaguar] == true)
+ parameters.Add(FlagStrings.AtariJaguar);
}
// BE Opcode
- if (GetSupportedCommands(Flag.BEOpcode).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.BEOpcode))
{
- if (this[Flag.BEOpcode] == true && this[Flag.D8Opcode] != true)
+ if (this[FlagStrings.BEOpcode] == true && this[FlagStrings.D8Opcode] != true)
{
- parameters.Add(Converters.LongName(Flag.BEOpcode));
+ parameters.Add(FlagStrings.BEOpcode);
if (BEOpcodeValue != null
&& (BEOpcodeValue == "raw" || BEOpcodeValue == "pack"))
parameters.Add(BEOpcodeValue);
@@ -905,11 +883,11 @@ namespace MPF.DiscImageCreator
}
// C2 Opcode
- if (GetSupportedCommands(Flag.C2Opcode).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.C2Opcode))
{
- if (this[Flag.C2Opcode] == true)
+ if (this[FlagStrings.C2Opcode] == true)
{
- parameters.Add(Converters.LongName(Flag.C2Opcode));
+ parameters.Add(FlagStrings.C2Opcode);
if (C2OpcodeValue[0] != null)
{
if (C2OpcodeValue[0] > 0)
@@ -948,39 +926,39 @@ namespace MPF.DiscImageCreator
}
// Copyright Management Information
- if (GetSupportedCommands(Flag.CopyrightManagementInformation).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.CopyrightManagementInformation))
{
- if (this[Flag.CopyrightManagementInformation] == true)
- parameters.Add(Converters.LongName(Flag.CopyrightManagementInformation));
+ if (this[FlagStrings.CopyrightManagementInformation] == true)
+ parameters.Add(FlagStrings.CopyrightManagementInformation);
}
// D8 Opcode
- if (GetSupportedCommands(Flag.D8Opcode).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.D8Opcode))
{
- if (this[Flag.D8Opcode] == true)
- parameters.Add(Converters.LongName(Flag.D8Opcode));
+ if (this[FlagStrings.D8Opcode] == true)
+ parameters.Add(FlagStrings.D8Opcode);
}
// Disable Beep
- if (GetSupportedCommands(Flag.DisableBeep).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.DisableBeep))
{
- if (this[Flag.DisableBeep] == true)
- parameters.Add(Converters.LongName(Flag.DisableBeep));
+ if (this[FlagStrings.DisableBeep] == true)
+ parameters.Add(FlagStrings.DisableBeep);
}
// Extract MicroSoftCabFile
- if (GetSupportedCommands(Flag.ExtractMicroSoftCabFile).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ExtractMicroSoftCabFile))
{
- if (this[Flag.ExtractMicroSoftCabFile] == true)
- parameters.Add(Converters.LongName(Flag.ExtractMicroSoftCabFile));
+ if (this[FlagStrings.ExtractMicroSoftCabFile] == true)
+ parameters.Add(FlagStrings.ExtractMicroSoftCabFile);
}
// Fix
- if (GetSupportedCommands(Flag.Fix).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Fix))
{
- if (this[Flag.Fix] == true)
+ if (this[FlagStrings.Fix] == true)
{
- parameters.Add(Converters.LongName(Flag.Fix));
+ parameters.Add(FlagStrings.Fix);
if (FixValue != null)
parameters.Add(FixValue.ToString());
else
@@ -989,109 +967,109 @@ namespace MPF.DiscImageCreator
}
// Force Unit Access
- if (GetSupportedCommands(Flag.ForceUnitAccess).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ForceUnitAccess))
{
- if (this[Flag.ForceUnitAccess] == true)
+ if (this[FlagStrings.ForceUnitAccess] == true)
{
- parameters.Add(Converters.LongName(Flag.ForceUnitAccess));
+ parameters.Add(FlagStrings.ForceUnitAccess);
if (ForceUnitAccessValue != null)
parameters.Add(ForceUnitAccessValue.ToString());
}
}
// Multi-Sector Read
- if (GetSupportedCommands(Flag.MultiSectorRead).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MultiSectorRead))
{
- if (this[Flag.MultiSectorRead] == true)
- parameters.Add(Converters.LongName(Flag.MultiSectorRead));
+ if (this[FlagStrings.MultiSectorRead] == true)
+ parameters.Add(FlagStrings.MultiSectorRead);
}
// Multi-Session
- if (GetSupportedCommands(Flag.MultiSession).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.MultiSession))
{
- if (this[Flag.MultiSession] == true)
- parameters.Add(Converters.LongName(Flag.MultiSession));
+ if (this[FlagStrings.MultiSession] == true)
+ parameters.Add(FlagStrings.MultiSession);
}
// Not fix SubP
- if (GetSupportedCommands(Flag.NoFixSubP).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoFixSubP))
{
- if (this[Flag.NoFixSubP] == true)
- parameters.Add(Converters.LongName(Flag.NoFixSubP));
+ if (this[FlagStrings.NoFixSubP] == true)
+ parameters.Add(FlagStrings.NoFixSubP);
}
// Not fix SubQ
- if (GetSupportedCommands(Flag.NoFixSubQ).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoFixSubQ))
{
- if (this[Flag.NoFixSubQ] == true)
- parameters.Add(Converters.LongName(Flag.NoFixSubQ));
+ if (this[FlagStrings.NoFixSubQ] == true)
+ parameters.Add(FlagStrings.NoFixSubQ);
}
// Not fix SubQ (PlayStation LibCrypt)
- if (GetSupportedCommands(Flag.NoFixSubQLibCrypt).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoFixSubQLibCrypt))
{
- if (this[Flag.NoFixSubQLibCrypt] == true)
- parameters.Add(Converters.LongName(Flag.NoFixSubQLibCrypt));
+ if (this[FlagStrings.NoFixSubQLibCrypt] == true)
+ parameters.Add(FlagStrings.NoFixSubQLibCrypt);
}
// Not fix SubQ (SecuROM)
- if (GetSupportedCommands(Flag.NoFixSubQSecuROM).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoFixSubQSecuROM))
{
- if (this[Flag.NoFixSubQSecuROM] == true)
- parameters.Add(Converters.LongName(Flag.NoFixSubQSecuROM));
+ if (this[FlagStrings.NoFixSubQSecuROM] == true)
+ parameters.Add(FlagStrings.NoFixSubQSecuROM);
}
// Not fix SubRtoW
- if (GetSupportedCommands(Flag.NoFixSubRtoW).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoFixSubRtoW))
{
- if (this[Flag.NoFixSubRtoW] == true)
- parameters.Add(Converters.LongName(Flag.NoFixSubRtoW));
+ if (this[FlagStrings.NoFixSubRtoW] == true)
+ parameters.Add(FlagStrings.NoFixSubRtoW);
}
// Not skip security sectors
- if (GetSupportedCommands(Flag.NoSkipSS).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.NoSkipSS))
{
- if (this[Flag.NoSkipSS] == true)
+ if (this[FlagStrings.NoSkipSS] == true)
{
- parameters.Add(Converters.LongName(Flag.NoSkipSS));
+ parameters.Add(FlagStrings.NoSkipSS);
if (NoSkipSecuritySectorValue != null)
parameters.Add(NoSkipSecuritySectorValue.ToString());
}
}
// Pad sectors
- if (GetSupportedCommands(Flag.PadSector).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.PadSector))
{
- if (this[Flag.PadSector] == true)
+ if (this[FlagStrings.PadSector] == true)
{
- parameters.Add(Converters.LongName(Flag.PadSector));
+ parameters.Add(FlagStrings.PadSector);
if (PadSectorValue != null)
parameters.Add(PadSectorValue.ToString());
}
}
// Raw read (2064 byte/sector)
- if (GetSupportedCommands(Flag.Raw).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Raw))
{
- if (this[Flag.Raw] == true)
- parameters.Add(Converters.LongName(Flag.Raw));
+ if (this[FlagStrings.Raw] == true)
+ parameters.Add(FlagStrings.Raw);
}
// Resume
- if (GetSupportedCommands(Flag.Resume).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Resume))
{
- if (this[Flag.Resume] == true)
- parameters.Add(Converters.LongName(Flag.Resume));
+ if (this[FlagStrings.Resume] == true)
+ parameters.Add(FlagStrings.Resume);
}
// Reverse read
- if (GetSupportedCommands(Flag.Reverse).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.Reverse))
{
- if (this[Flag.Reverse] == true)
+ if (this[FlagStrings.Reverse] == true)
{
- parameters.Add(Converters.LongName(Flag.Reverse));
+ parameters.Add(FlagStrings.Reverse);
- if (BaseCommand == Command.DigitalVideoDisc)
+ if (BaseCommand == CommandStrings.DigitalVideoDisc)
{
if (ReverseStartLBAValue == null || ReverseEndLBAValue == null)
return null;
@@ -1103,18 +1081,18 @@ namespace MPF.DiscImageCreator
}
// Scan PlayStation anti-mod strings
- if (GetSupportedCommands(Flag.ScanAntiMod).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ScanAntiMod))
{
- if (this[Flag.ScanAntiMod] == true)
- parameters.Add(Converters.LongName(Flag.ScanAntiMod));
+ if (this[FlagStrings.ScanAntiMod] == true)
+ parameters.Add(FlagStrings.ScanAntiMod);
}
// Scan file to detect protect
- if (GetSupportedCommands(Flag.ScanFileProtect).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ScanFileProtect))
{
- if (this[Flag.ScanFileProtect] == true)
+ if (this[FlagStrings.ScanFileProtect] == true)
{
- parameters.Add(Converters.LongName(Flag.ScanFileProtect));
+ parameters.Add(FlagStrings.ScanFileProtect);
if (ScanFileProtectValue != null)
{
if (ScanFileProtectValue > 0)
@@ -1126,25 +1104,25 @@ namespace MPF.DiscImageCreator
}
// Scan file to detect protect
- if (GetSupportedCommands(Flag.ScanSectorProtect).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.ScanSectorProtect))
{
- if (this[Flag.ScanSectorProtect] == true)
- parameters.Add(Converters.LongName(Flag.ScanSectorProtect));
+ if (this[FlagStrings.ScanSectorProtect] == true)
+ parameters.Add(FlagStrings.ScanSectorProtect);
}
// Scan 74:00:00 (Saturn)
- if (GetSupportedCommands(Flag.SeventyFour).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SeventyFour))
{
- if (this[Flag.SeventyFour] == true)
- parameters.Add(Converters.LongName(Flag.SeventyFour));
+ if (this[FlagStrings.SeventyFour] == true)
+ parameters.Add(FlagStrings.SeventyFour);
}
// Skip sectors
- if (GetSupportedCommands(Flag.SkipSector).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SkipSector))
{
- if (this[Flag.SkipSector] == true)
+ if (this[FlagStrings.SkipSector] == true)
{
- parameters.Add(Converters.LongName(Flag.SkipSector));
+ parameters.Add(FlagStrings.SkipSector);
if (SkipSectorValue[0] != null)
{
if (SkipSectorValue[0] > 0)
@@ -1161,11 +1139,11 @@ namespace MPF.DiscImageCreator
}
// Set Subchannel read level
- if (GetSupportedCommands(Flag.SubchannelReadLevel).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.SubchannelReadLevel))
{
- if (this[Flag.SubchannelReadLevel] == true)
+ if (this[FlagStrings.SubchannelReadLevel] == true)
{
- parameters.Add(Converters.LongName(Flag.SubchannelReadLevel));
+ parameters.Add(FlagStrings.SubchannelReadLevel);
if (SubchannelReadLevelValue != null)
{
if (SubchannelReadLevelValue >= 0 && SubchannelReadLevelValue <= 2)
@@ -1177,18 +1155,18 @@ namespace MPF.DiscImageCreator
}
// Use Anchor Volume Descriptor Pointer
- if (GetSupportedCommands(Flag.UseAnchorVolumeDescriptorPointer).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.UseAnchorVolumeDescriptorPointer))
{
- if (this[Flag.UseAnchorVolumeDescriptorPointer] == true)
- parameters.Add(Converters.LongName(Flag.UseAnchorVolumeDescriptorPointer));
+ if (this[FlagStrings.UseAnchorVolumeDescriptorPointer] == true)
+ parameters.Add(FlagStrings.UseAnchorVolumeDescriptorPointer);
}
// VideoNow
- if (GetSupportedCommands(Flag.VideoNow).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.VideoNow))
{
- if (this[Flag.VideoNow] == true)
+ if (this[FlagStrings.VideoNow] == true)
{
- parameters.Add(Converters.LongName(Flag.VideoNow));
+ parameters.Add(FlagStrings.VideoNow);
if (VideoNowValue != null)
{
if (VideoNowValue >= 0)
@@ -1200,22 +1178,237 @@ namespace MPF.DiscImageCreator
}
// VideoNow Color
- if (GetSupportedCommands(Flag.VideoNowColor).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.VideoNowColor))
{
- if (this[Flag.VideoNowColor] == true)
- parameters.Add(Converters.LongName(Flag.VideoNowColor));
+ if (this[FlagStrings.VideoNowColor] == true)
+ parameters.Add(FlagStrings.VideoNowColor);
}
// VideoNowXP
- if (GetSupportedCommands(Flag.VideoNowXP).Contains(BaseCommand))
+ if (IsFlagSupported(FlagStrings.VideoNowXP))
{
- if (this[Flag.VideoNowXP] == true)
- parameters.Add(Converters.LongName(Flag.VideoNowXP));
+ if (this[FlagStrings.VideoNowXP] == true)
+ parameters.Add(FlagStrings.VideoNowXP);
}
return string.Join(" ", parameters);
}
+ ///
+ public override Dictionary> GetCommandSupport()
+ {
+ return new Dictionary>()
+ {
+ [CommandStrings.Audio] = new List()
+ {
+ FlagStrings.BEOpcode,
+ FlagStrings.C2Opcode,
+ FlagStrings.D8Opcode,
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.MultiSession,
+ FlagStrings.NoFixSubP,
+ FlagStrings.NoFixSubQ,
+ FlagStrings.NoFixSubRtoW,
+ FlagStrings.Reverse,
+ FlagStrings.ScanAntiMod,
+ FlagStrings.ScanFileProtect,
+ FlagStrings.ScanSectorProtect,
+ FlagStrings.SkipSector,
+ FlagStrings.SubchannelReadLevel,
+ },
+
+ [CommandStrings.BluRay] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoSkipSS,
+ FlagStrings.UseAnchorVolumeDescriptorPointer,
+ },
+
+ [CommandStrings.Close] = new List()
+ {
+ },
+
+ [CommandStrings.CompactDisc] = new List()
+ {
+ FlagStrings.AddOffset,
+ FlagStrings.AMSF,
+ FlagStrings.AtariJaguar,
+ FlagStrings.BEOpcode,
+ FlagStrings.C2Opcode,
+ FlagStrings.D8Opcode,
+ FlagStrings.DisableBeep,
+ FlagStrings.ExtractMicroSoftCabFile,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.MultiSectorRead,
+ FlagStrings.MultiSession,
+ FlagStrings.NoFixSubP,
+ FlagStrings.NoFixSubQ,
+ FlagStrings.NoFixSubQLibCrypt,
+ FlagStrings.NoFixSubQSecuROM,
+ FlagStrings.NoFixSubRtoW,
+ FlagStrings.ScanAntiMod,
+ FlagStrings.ScanFileProtect,
+ FlagStrings.ScanSectorProtect,
+ FlagStrings.SeventyFour,
+ FlagStrings.SubchannelReadLevel,
+ FlagStrings.VideoNow,
+ FlagStrings.VideoNowColor,
+ FlagStrings.VideoNowXP,
+ },
+
+ [CommandStrings.Data] = new List()
+ {
+ FlagStrings.BEOpcode,
+ FlagStrings.C2Opcode,
+ FlagStrings.D8Opcode,
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.MultiSession,
+ FlagStrings.NoFixSubP,
+ FlagStrings.NoFixSubQ,
+ FlagStrings.NoFixSubRtoW,
+ FlagStrings.Reverse,
+ FlagStrings.ScanAntiMod,
+ FlagStrings.ScanFileProtect,
+ FlagStrings.ScanSectorProtect,
+ FlagStrings.SkipSector,
+ FlagStrings.SubchannelReadLevel,
+ },
+
+ [CommandStrings.DigitalVideoDisc] = new List()
+ {
+ FlagStrings.CopyrightManagementInformation,
+ FlagStrings.DisableBeep,
+ FlagStrings.Fix,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.PadSector,
+ FlagStrings.Raw,
+ FlagStrings.Resume,
+ FlagStrings.Reverse,
+ FlagStrings.ScanFileProtect,
+ FlagStrings.UseAnchorVolumeDescriptorPointer,
+ },
+
+ [CommandStrings.Disk] = new List()
+ {
+ },
+
+ [CommandStrings.DriveSpeed] = new List()
+ {
+ },
+
+ [CommandStrings.Eject] = new List()
+ {
+ },
+
+ [CommandStrings.Floppy] = new List()
+ {
+ },
+
+ [CommandStrings.GDROM] = new List()
+ {
+ FlagStrings.BEOpcode,
+ FlagStrings.C2Opcode,
+ FlagStrings.D8Opcode,
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoFixSubP,
+ FlagStrings.NoFixSubQ,
+ FlagStrings.NoFixSubRtoW,
+ FlagStrings.SubchannelReadLevel,
+ },
+
+ [CommandStrings.MDS] = new List()
+ {
+ },
+
+ [CommandStrings.Merge] = new List()
+ {
+ },
+
+ [CommandStrings.Reset] = new List()
+ {
+ },
+
+ [CommandStrings.SACD] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ },
+
+ [CommandStrings.Start] = new List()
+ {
+ },
+
+ [CommandStrings.Stop] = new List()
+ {
+ },
+
+ [CommandStrings.Sub] = new List()
+ {
+ },
+
+ [CommandStrings.Swap] = new List()
+ {
+ FlagStrings.AddOffset,
+ FlagStrings.BEOpcode,
+ FlagStrings.C2Opcode,
+ FlagStrings.D8Opcode,
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.MultiSession,
+ FlagStrings.NoFixSubP,
+ FlagStrings.NoFixSubQ,
+ FlagStrings.NoFixSubQLibCrypt,
+ FlagStrings.NoFixSubQSecuROM,
+ FlagStrings.NoFixSubRtoW,
+ FlagStrings.ScanAntiMod,
+ FlagStrings.ScanFileProtect,
+ FlagStrings.ScanSectorProtect,
+ FlagStrings.SeventyFour,
+ FlagStrings.SubchannelReadLevel,
+ FlagStrings.VideoNow,
+ FlagStrings.VideoNowColor,
+ FlagStrings.VideoNowXP,
+ },
+
+ [CommandStrings.Tape] = new List()
+ {
+ },
+
+ [CommandStrings.XBOX] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoSkipSS,
+ FlagStrings.UseAnchorVolumeDescriptorPointer,
+ },
+
+ [CommandStrings.XBOXSwap] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoSkipSS,
+ },
+
+ [CommandStrings.XGD2Swap] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoSkipSS,
+ },
+
+ [CommandStrings.XGD3Swap] = new List()
+ {
+ FlagStrings.DisableBeep,
+ FlagStrings.ForceUnitAccess,
+ FlagStrings.NoSkipSS,
+ },
+ };
+ }
+
///
public override string GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType);
@@ -1330,21 +1523,21 @@ namespace MPF.DiscImageCreator
{
switch (BaseCommand)
{
- case Command.Audio:
- case Command.BluRay:
- case Command.CompactDisc:
- case Command.Data:
- case Command.DigitalVideoDisc:
- case Command.Disk:
- case Command.Floppy:
- case Command.GDROM:
- case Command.SACD:
- case Command.Swap:
- case Command.Tape:
- case Command.XBOX:
- case Command.XBOXSwap:
- case Command.XGD2Swap:
- case Command.XGD3Swap:
+ case CommandStrings.Audio:
+ case CommandStrings.BluRay:
+ case CommandStrings.CompactDisc:
+ case CommandStrings.Data:
+ case CommandStrings.DigitalVideoDisc:
+ case CommandStrings.Disk:
+ case CommandStrings.Floppy:
+ case CommandStrings.GDROM:
+ case CommandStrings.SACD:
+ case CommandStrings.Swap:
+ case CommandStrings.Tape:
+ case CommandStrings.XBOX:
+ case CommandStrings.XBOXSwap:
+ case CommandStrings.XGD2Swap:
+ case CommandStrings.XGD3Swap:
return true;
default:
@@ -1355,7 +1548,7 @@ namespace MPF.DiscImageCreator
///
protected override void ResetValues()
{
- BaseCommand = Command.NONE;
+ BaseCommand = CommandStrings.NONE;
DriveLetter = null;
DriveSpeed = null;
@@ -1365,7 +1558,7 @@ namespace MPF.DiscImageCreator
StartLBAValue = null;
EndLBAValue = null;
- _flags = new Dictionary();
+ flags = new Dictionary();
AddOffsetValue = null;
BEOpcodeValue = null;
@@ -1394,7 +1587,7 @@ namespace MPF.DiscImageCreator
// Set disable beep flag, if needed
if (options.DICQuietMode)
- this[Flag.DisableBeep] = true;
+ this[FlagStrings.DisableBeep] = true;
// Set the C2 reread count
switch (options.DICRereadCount)
@@ -1414,45 +1607,45 @@ namespace MPF.DiscImageCreator
switch (this.Type)
{
case MediaType.CDROM:
- this[Flag.C2Opcode] = true;
+ this[FlagStrings.C2Opcode] = true;
switch (this.System)
{
case KnownSystem.AppleMacintosh:
case KnownSystem.IBMPCCompatible:
- this[Flag.NoFixSubQSecuROM] = true;
- this[Flag.ScanFileProtect] = true;
- this[Flag.ScanSectorProtect] = options.DICParanoidMode;
- this[Flag.SubchannelReadLevel] = options.DICParanoidMode;
- if (this[Flag.SubchannelReadLevel] == true)
+ this[FlagStrings.NoFixSubQSecuROM] = true;
+ this[FlagStrings.ScanFileProtect] = true;
+ this[FlagStrings.ScanSectorProtect] = options.DICParanoidMode;
+ this[FlagStrings.SubchannelReadLevel] = options.DICParanoidMode;
+ if (this[FlagStrings.SubchannelReadLevel] == true)
SubchannelReadLevelValue = 2;
break;
case KnownSystem.AtariJaguarCD:
- this[Flag.AtariJaguar] = true;
+ this[FlagStrings.AtariJaguar] = true;
break;
case KnownSystem.HasbroVideoNow:
case KnownSystem.HasbroVideoNowColor:
case KnownSystem.HasbroVideoNowJr:
case KnownSystem.HasbroVideoNowXP:
- this[Flag.AddOffset] = true;
+ this[FlagStrings.AddOffset] = true;
this.AddOffsetValue = 18032;
break;
case KnownSystem.SonyPlayStation:
- this[Flag.ScanAntiMod] = true;
- this[Flag.NoFixSubQLibCrypt] = true;
+ this[FlagStrings.ScanAntiMod] = true;
+ this[FlagStrings.NoFixSubQLibCrypt] = true;
break;
}
break;
case MediaType.DVD:
- this[Flag.CopyrightManagementInformation] = options.DICUseCMIFlag;
- this[Flag.ScanFileProtect] = options.DICParanoidMode;
+ this[FlagStrings.CopyrightManagementInformation] = options.DICUseCMIFlag;
+ this[FlagStrings.ScanFileProtect] = options.DICParanoidMode;
break;
case MediaType.GDROM:
- this[Flag.C2Opcode] = true;
+ this[FlagStrings.C2Opcode] = true;
break;
case MediaType.HDDVD:
- this[Flag.CopyrightManagementInformation] = options.DICUseCMIFlag;
+ this[FlagStrings.CopyrightManagementInformation] = options.DICUseCMIFlag;
break;
case MediaType.BluRay:
// Currently no defaults set
@@ -1460,10 +1653,10 @@ namespace MPF.DiscImageCreator
// Special Formats
case MediaType.NintendoGameCubeGameDisc:
- this[Flag.Raw] = true;
+ this[FlagStrings.Raw] = true;
break;
case MediaType.NintendoWiiOpticalDisc:
- this[Flag.Raw] = true;
+ this[FlagStrings.Raw] = true;
break;
// Non-optical
@@ -1476,6 +1669,8 @@ namespace MPF.DiscImageCreator
///
protected override bool ValidateAndSetParameters(string parameters)
{
+ BaseCommand = CommandStrings.NONE;
+
// The string has to be valid by itself first
if (string.IsNullOrWhiteSpace(parameters))
return false;
@@ -1489,36 +1684,37 @@ namespace MPF.DiscImageCreator
.ToList();
// Determine what the commandline should look like given the first item
- BaseCommand = Converters.StringToCommand(parts[0]);
- if (BaseCommand == Command.NONE)
- return false;
+ BaseCommand = parts[0];
// Loop through ordered command-specific flags
int index = -1;
switch (BaseCommand)
{
- case Command.Audio:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Audio:
+ if (parts.Count < 6)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
- if (!DoesExist(parts, 4) || !IsValidInt32(parts[4], lowerBound: 0))
+ if (!IsValidInt32(parts[4], lowerBound: 0))
return false;
else
StartLBAValue = Int32.Parse(parts[4]);
- if (!DoesExist(parts, 5) || !IsValidInt32(parts[5], lowerBound: 0))
+ if (!IsValidInt32(parts[5], lowerBound: 0))
return false;
else
EndLBAValue = Int32.Parse(parts[5]);
@@ -1526,18 +1722,21 @@ namespace MPF.DiscImageCreator
index = 6;
break;
- case Command.BluRay:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.BluRay:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1545,29 +1744,32 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.Close:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Close:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.CompactDisc:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.CompactDisc:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1575,28 +1777,31 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.Data:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Data:
+ if (parts.Count < 6)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
- if (!DoesExist(parts, 4) || !IsValidInt32(parts[4], lowerBound: 0))
+ if (!IsValidInt32(parts[4], lowerBound: 0))
return false;
else
StartLBAValue = Int32.Parse(parts[4]);
- if (!DoesExist(parts, 5) || !IsValidInt32(parts[5], lowerBound: 0))
+ if (!IsValidInt32(parts[5], lowerBound: 0))
return false;
else
EndLBAValue = Int32.Parse(parts[5]);
@@ -1604,18 +1809,21 @@ namespace MPF.DiscImageCreator
index = 6;
break;
- case Command.DigitalVideoDisc:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.DigitalVideoDisc:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 24)) // Officially 0-16
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 24)) // Officially 0-16
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1623,72 +1831,75 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.Disk:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Disk:
+ if (parts.Count != 3)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (parts.Count > 3)
- return false;
-
break;
- case Command.DriveSpeed:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.DriveSpeed:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Eject:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Eject:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Floppy:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Floppy:
+ if (parts.Count != 3)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (parts.Count > 3)
- return false;
-
break;
- case Command.GDROM:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.GDROM:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1696,56 +1907,59 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.MDS:
- if (!DoesExist(parts, 1) || IsFlag(parts[1]) || !File.Exists(parts[1]))
+ case CommandStrings.MDS:
+ if (parts.Count != 2)
+ return false;
+
+ if (IsFlag(parts[1]) || !File.Exists(parts[1]))
return false;
else
Filename = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Merge:
- if (!DoesExist(parts, 1) || IsFlag(parts[1]) || !File.Exists(parts[1]))
+ case CommandStrings.Merge:
+ if (parts.Count != 3)
+ return false;
+
+ if (IsFlag(parts[1]) || !File.Exists(parts[1]))
return false;
else
Filename = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]) || !File.Exists(parts[2]))
+ if (IsFlag(parts[2]) || !File.Exists(parts[2]))
return false;
else
OptiarcFilename = parts[2];
- if (parts.Count > 3)
- return false;
-
break;
- case Command.Reset:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Reset:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.SACD:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.SACD:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 16))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 16))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1753,51 +1967,54 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.Start:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Start:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Stop:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Stop:
+ if (parts.Count != 2)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Sub:
- if (!DoesExist(parts, 1) || IsFlag(parts[1]) || !File.Exists(parts[1]))
+ case CommandStrings.Sub:
+ if (parts.Count != 2)
+ return false;
+
+ if (IsFlag(parts[1]) || !File.Exists(parts[1]))
return false;
else
Filename = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.Swap:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.Swap:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1805,29 +2022,32 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.Tape:
- if (!DoesExist(parts, 1) || IsFlag(parts[1]) || !File.Exists(parts[1]))
+ case CommandStrings.Tape:
+ if (parts.Count != 2)
+ return false;
+
+ if (IsFlag(parts[1]) || !File.Exists(parts[1]))
return false;
else
Filename = parts[1];
- if (parts.Count > 2)
- return false;
-
break;
- case Command.XBOX:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.XBOX:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1835,20 +2055,23 @@ namespace MPF.DiscImageCreator
index = 4;
break;
- case Command.XBOXSwap:
- case Command.XGD2Swap:
- case Command.XGD3Swap:
- if (!DoesExist(parts, 1) || !IsValidDriveLetter(parts[1]))
+ case CommandStrings.XBOXSwap:
+ case CommandStrings.XGD2Swap:
+ case CommandStrings.XGD3Swap:
+ if (parts.Count < 4)
+ return false;
+
+ if (!IsValidDriveLetter(parts[1]))
return false;
else
DriveLetter = parts[1];
- if (!DoesExist(parts, 2) || IsFlag(parts[2]))
+ if (IsFlag(parts[2]))
return false;
else
Filename = parts[2];
- if (!DoesExist(parts, 3) || !IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
+ if (!IsValidInt32(parts[3], lowerBound: 0, upperBound: 72))
return false;
else
DriveSpeed = Int32.Parse(parts[3]);
@@ -1869,448 +2092,197 @@ namespace MPF.DiscImageCreator
{
for (int i = index; i < parts.Count; i++)
{
- switch (parts[i])
+ // Flag read-out values
+ int? intValue = null;
+ string stringValue = null;
+
+ // Add Offset
+ intValue = ProcessInt32Parameter(parts, FlagStrings.AddOffset, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue)
+ AddOffsetValue = intValue;
+
+ // AMSF
+ ProcessFlagParameter(parts, FlagStrings.AMSF, ref i);
+
+ // Atari Jaguar
+ ProcessFlagParameter(parts, FlagStrings.AtariJaguar, ref i);
+
+ // BE Opcode
+ stringValue = ProcessStringParameter(parts, FlagStrings.BEOpcode, ref i);
+ if (!string.IsNullOrEmpty(stringValue))
{
- case FlagStrings.AddOffset:
- if (!GetSupportedCommands(Flag.AddOffset).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.AddOffset] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.AddOffset] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1]))
- {
- return false;
- }
-
- this[Flag.AddOffset] = true;
- AddOffsetValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.AMSF:
- if (!GetSupportedCommands(Flag.AMSF).Contains(BaseCommand))
- return false;
-
- this[Flag.AMSF] = true;
- break;
-
- case FlagStrings.AtariJaguar:
- if (!GetSupportedCommands(Flag.AtariJaguar).Contains(BaseCommand))
- return false;
-
- this[Flag.AtariJaguar] = true;
- break;
-
- case FlagStrings.BEOpcode:
- if (!GetSupportedCommands(Flag.BEOpcode).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.BEOpcode] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.BEOpcode] = true;
- break;
- }
- else if (!string.Equals(parts[i + 1], "raw", StringComparison.OrdinalIgnoreCase)
- && !string.Equals(parts[i + 1], "pack", StringComparison.OrdinalIgnoreCase))
- {
- return false;
- }
-
- this[Flag.BEOpcode] = true;
- BEOpcodeValue = parts[i + 1].ToLowerInvariant();
- i++;
- break;
-
- case FlagStrings.C2Opcode:
- if (!GetSupportedCommands(Flag.C2Opcode).Contains(BaseCommand))
- return false;
-
- this[Flag.C2Opcode] = true;
- for (int j = 0; j < 4; j++)
- {
- if (!DoesExist(parts, i + 1))
- {
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
- else
- {
- C2OpcodeValue[j] = Int32.Parse(parts[i + 1]);
- i++;
- }
- }
-
- break;
-
- case FlagStrings.CopyrightManagementInformation:
- if (!GetSupportedCommands(Flag.CopyrightManagementInformation).Contains(BaseCommand))
- return false;
-
- this[Flag.CopyrightManagementInformation] = true;
- break;
-
- case FlagStrings.D8Opcode:
- if (!GetSupportedCommands(Flag.D8Opcode).Contains(BaseCommand))
- return false;
-
- this[Flag.D8Opcode] = true;
- break;
-
- case FlagStrings.DisableBeep:
- if (!GetSupportedCommands(Flag.DisableBeep).Contains(BaseCommand))
- return false;
-
- this[Flag.DisableBeep] = true;
- break;
-
- case FlagStrings.ExtractMicroSoftCabFile:
- if (!GetSupportedCommands(Flag.ExtractMicroSoftCabFile).Contains(BaseCommand))
- return false;
-
- this[Flag.ExtractMicroSoftCabFile] = true;
- break;
-
- case FlagStrings.Fix:
- if (!GetSupportedCommands(Flag.Fix).Contains(BaseCommand))
- return false;
- else if (!DoesExist(parts, i + 1))
- return false;
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- return false;
-
- this[Flag.Fix] = true;
- FixValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.ForceUnitAccess:
- if (!GetSupportedCommands(Flag.ForceUnitAccess).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.ForceUnitAccess] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.ForceUnitAccess] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
-
- this[Flag.ForceUnitAccess] = true;
- ForceUnitAccessValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.MultiSectorRead:
- if (!GetSupportedCommands(Flag.MultiSectorRead).Contains(BaseCommand))
- return false;
-
- this[Flag.MultiSectorRead] = true;
- break;
-
- case FlagStrings.MultiSession:
- if (!GetSupportedCommands(Flag.MultiSession).Contains(BaseCommand))
- return false;
-
- this[Flag.MultiSession] = true;
- break;
-
- case FlagStrings.NoFixSubP:
- if (!GetSupportedCommands(Flag.NoFixSubP).Contains(BaseCommand))
- return false;
-
- this[Flag.NoFixSubP] = true;
- break;
-
- case FlagStrings.NoFixSubQ:
- if (!GetSupportedCommands(Flag.NoFixSubQ).Contains(BaseCommand))
- return false;
-
- this[Flag.NoFixSubQ] = true;
- break;
-
- case FlagStrings.NoFixSubQLibCrypt:
- if (!GetSupportedCommands(Flag.NoFixSubQLibCrypt).Contains(BaseCommand))
- return false;
-
- this[Flag.NoFixSubQLibCrypt] = true;
- break;
-
- case FlagStrings.NoFixSubQSecuROM:
- if (!GetSupportedCommands(Flag.NoFixSubQSecuROM).Contains(BaseCommand))
- return false;
-
- this[Flag.NoFixSubQSecuROM] = true;
- break;
-
- case FlagStrings.NoFixSubRtoW:
- if (!GetSupportedCommands(Flag.NoFixSubRtoW).Contains(BaseCommand))
- return false;
-
- this[Flag.NoFixSubRtoW] = true;
- break;
-
- case FlagStrings.NoSkipSS:
- if (!GetSupportedCommands(Flag.NoSkipSS).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.NoSkipSS] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.NoSkipSS] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
-
- this[Flag.NoSkipSS] = true;
- NoSkipSecuritySectorValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.PadSector:
- if (!GetSupportedCommands(Flag.PadSector).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.PadSector] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.PadSector] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0, upperBound: 1))
- {
- return false;
- }
-
- this[Flag.PadSector] = true;
- PadSectorValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.Raw:
- if (!GetSupportedCommands(Flag.Raw).Contains(BaseCommand))
- return false;
-
- this[Flag.Raw] = true;
- break;
-
- case FlagStrings.Resume:
- if (!GetSupportedCommands(Flag.Resume).Contains(BaseCommand))
- return false;
-
- this[Flag.Resume] = true;
- break;
-
- case FlagStrings.Reverse:
- if (!GetSupportedCommands(Flag.Reverse).Contains(BaseCommand))
- return false;
-
- // DVD specifically requires StartLBA and EndLBA
- if (BaseCommand == Command.DigitalVideoDisc)
- {
- if (!DoesExist(parts, i + 1) || !DoesExist(parts, i + 2))
- return false;
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0) || !IsValidInt32(parts[i + 2], lowerBound: 0))
- return false;
-
- ReverseStartLBAValue = Int32.Parse(parts[i + 1]);
- ReverseEndLBAValue = Int32.Parse(parts[i + 2]);
- i += 2;
- }
-
- this[Flag.Reverse] = true;
- break;
-
- case FlagStrings.ScanAntiMod:
- if (!GetSupportedCommands(Flag.ScanAntiMod).Contains(BaseCommand))
- return false;
-
- this[Flag.ScanAntiMod] = true;
- break;
-
- case FlagStrings.ScanFileProtect:
- if (!GetSupportedCommands(Flag.ScanFileProtect).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.ScanFileProtect] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.ScanFileProtect] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
-
- this[Flag.ScanFileProtect] = true;
- ScanFileProtectValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.ScanSectorProtect:
- if (!GetSupportedCommands(Flag.ScanSectorProtect).Contains(BaseCommand))
- return false;
-
- this[Flag.ScanSectorProtect] = true;
- break;
-
- case FlagStrings.SeventyFour:
- if (!GetSupportedCommands(Flag.SeventyFour).Contains(BaseCommand))
- return false;
-
- this[Flag.SeventyFour] = true;
- break;
-
- case FlagStrings.SkipSector:
- if (!GetSupportedCommands(Flag.SkipSector).Contains(BaseCommand))
- return false;
-
- this[Flag.SkipSector] = true;
- for (int j = 0; j < 2; j++)
- {
- if (!DoesExist(parts, i + 1))
- {
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
- else
- {
- SkipSectorValue[j] = Int32.Parse(parts[i + 1]);
- i++;
- }
- }
-
- break;
-
- case FlagStrings.SubchannelReadLevel:
- if (!GetSupportedCommands(Flag.SubchannelReadLevel).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.SubchannelReadLevel] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.SubchannelReadLevel] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0, upperBound: 2))
- {
- return false;
- }
-
- this[Flag.SubchannelReadLevel] = true;
- SubchannelReadLevelValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.UseAnchorVolumeDescriptorPointer:
- if (!GetSupportedCommands(Flag.UseAnchorVolumeDescriptorPointer).Contains(BaseCommand))
- return false;
-
- this[Flag.UseAnchorVolumeDescriptorPointer] = true;
- break;
-
- case FlagStrings.VideoNow:
- if (!GetSupportedCommands(Flag.VideoNow).Contains(BaseCommand))
- {
- return false;
- }
- else if (!DoesExist(parts, i + 1))
- {
- this[Flag.VideoNow] = true;
- break;
- }
- else if (IsFlag(parts[i + 1]))
- {
- this[Flag.VideoNow] = true;
- break;
- }
- else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
- {
- return false;
- }
-
- this[Flag.VideoNow] = true;
- VideoNowValue = Int32.Parse(parts[i + 1]);
- i++;
- break;
-
- case FlagStrings.VideoNowColor:
- if (!GetSupportedCommands(Flag.VideoNowColor).Contains(BaseCommand))
- return false;
-
- this[Flag.VideoNowColor] = true;
- break;
-
- case FlagStrings.VideoNowXP:
- if (!GetSupportedCommands(Flag.VideoNowXP).Contains(BaseCommand))
- return false;
-
- this[Flag.VideoNowXP] = true;
- break;
-
- default:
- return false;
+ if (string.Equals(stringValue, "raw") || string.Equals(stringValue, "pack"))
+ BEOpcodeValue = stringValue;
+ else
+ i--;
}
+
+ // C2 Opcode
+ if (parts[i] == FlagStrings.C2Opcode && IsFlagSupported(FlagStrings.C2Opcode))
+ {
+ this[FlagStrings.C2Opcode] = true;
+ for (int j = 0; j < 4; j++)
+ {
+ if (!DoesExist(parts, i + 1))
+ {
+ break;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ break;
+ }
+ else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
+ {
+ return false;
+ }
+ else
+ {
+ C2OpcodeValue[j] = Int32.Parse(parts[i + 1]);
+ i++;
+ }
+ }
+ }
+
+ // Copyright Management Information
+ ProcessFlagParameter(parts, FlagStrings.CopyrightManagementInformation, ref i);
+
+ // D8 Opcode
+ ProcessFlagParameter(parts, FlagStrings.D8Opcode, ref i);
+
+ // Disable Beep
+ ProcessFlagParameter(parts, FlagStrings.DisableBeep, ref i);
+
+ // Extract MS-CAB
+ ProcessFlagParameter(parts, FlagStrings.ExtractMicroSoftCabFile, ref i);
+
+ // Fix
+ intValue = ProcessInt32Parameter(parts, FlagStrings.Fix, ref i);
+ if (intValue != null && intValue != Int32.MinValue)
+ FixValue = intValue;
+
+ // Force Unit Access
+ intValue = ProcessInt32Parameter(parts, FlagStrings.ForceUnitAccess, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0)
+ ForceUnitAccessValue = intValue;
+
+ // Multi-Sector Read
+ ProcessFlagParameter(parts, FlagStrings.MultiSectorRead, ref i);
+
+ // Multi-Session
+ ProcessFlagParameter(parts, FlagStrings.MultiSession, ref i);
+
+ // NoFixSubP
+ ProcessFlagParameter(parts, FlagStrings.NoFixSubP, ref i);
+
+ // NoFixSubQ
+ ProcessFlagParameter(parts, FlagStrings.NoFixSubQ, ref i);
+
+ // NoFixSubQLibCrypt
+ ProcessFlagParameter(parts, FlagStrings.NoFixSubQLibCrypt, ref i);
+
+ // NoFixSubQSecuROM
+ ProcessFlagParameter(parts, FlagStrings.NoFixSubQSecuROM, ref i);
+
+ // NoFixSubRtoW
+ ProcessFlagParameter(parts, FlagStrings.NoFixSubRtoW, ref i);
+
+ // NoSkipSS
+ intValue = ProcessInt32Parameter(parts, FlagStrings.NoSkipSS, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0)
+ NoSkipSecuritySectorValue = intValue;
+
+ // PadSector
+ intValue = ProcessInt32Parameter(parts, FlagStrings.PadSector, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0)
+ PadSectorValue = intValue;
+
+ // Raw
+ ProcessFlagParameter(parts, FlagStrings.Raw, ref i);
+
+ // Resume
+ ProcessFlagParameter(parts, FlagStrings.Resume, ref i);
+
+ // Reverse
+ if (parts[i] == FlagStrings.Reverse && IsFlagSupported(FlagStrings.Reverse))
+ {
+ // DVD specifically requires StartLBA and EndLBA
+ if (BaseCommand == CommandStrings.DigitalVideoDisc)
+ {
+ if (!DoesExist(parts, i + 1) || !DoesExist(parts, i + 2))
+ return false;
+ else if (!IsValidInt32(parts[i + 1], lowerBound: 0) || !IsValidInt32(parts[i + 2], lowerBound: 0))
+ return false;
+
+ ReverseStartLBAValue = Int32.Parse(parts[i + 1]);
+ ReverseEndLBAValue = Int32.Parse(parts[i + 2]);
+ i += 2;
+ }
+
+ this[FlagStrings.Reverse] = true;
+ }
+
+ // ScanAntiMod
+ ProcessFlagParameter(parts, FlagStrings.ScanAntiMod, ref i);
+
+ // ScanFileProtect
+ intValue = ProcessInt32Parameter(parts, FlagStrings.ScanFileProtect, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0)
+ ScanFileProtectValue = intValue;
+
+ // ScanSectorProtect
+ ProcessFlagParameter(parts, FlagStrings.ScanSectorProtect, ref i);
+
+ // SeventyFour
+ ProcessFlagParameter(parts, FlagStrings.SeventyFour, ref i);
+
+ // SkipSector
+ if (parts[i] == FlagStrings.SkipSector && IsFlagSupported(FlagStrings.SkipSector))
+ {
+ bool stillValid = true;
+ for (int j = 0; j < 2; j++)
+ {
+ if (!DoesExist(parts, i + 1))
+ {
+ break;
+ }
+ else if (IsFlag(parts[i + 1]))
+ {
+ break;
+ }
+ else if (!IsValidInt32(parts[i + 1], lowerBound: 0))
+ {
+ stillValid = false;
+ break;
+ }
+ else
+ {
+ SkipSectorValue[j] = Int32.Parse(parts[i + 1]);
+ i++;
+ }
+ }
+
+ if (stillValid)
+ this[FlagStrings.SkipSector] = true;
+ }
+
+ // SubchannelReadLevel
+ intValue = ProcessInt32Parameter(parts, FlagStrings.SubchannelReadLevel, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0 && intValue <= 2)
+ SubchannelReadLevelValue = intValue;
+
+ // SeventyFour
+ ProcessFlagParameter(parts, FlagStrings.UseAnchorVolumeDescriptorPointer, ref i);
+
+ // VideoNow
+ intValue = ProcessInt32Parameter(parts, FlagStrings.VideoNow, ref i, missingAllowed: true);
+ if (intValue != null && intValue != Int32.MinValue && intValue >= 0)
+ VideoNowValue = intValue;
+
+ // VideoNowColor
+ ProcessFlagParameter(parts, FlagStrings.VideoNowColor, ref i);
+
+ // VideoNowXP
+ ProcessFlagParameter(parts, FlagStrings.VideoNowXP, ref i);
}
}
@@ -2321,203 +2293,6 @@ namespace MPF.DiscImageCreator
#region Private Extra Methods
- ///
- /// Get the list of commands that use a given flag
- ///
- /// Flag value to get commands for
- /// List of DiscImageCreator.Commands, if possible
- private static List GetSupportedCommands(Flag flag)
- {
- var commands = new List();
- switch (flag)
- {
- case Flag.AddOffset:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.AMSF:
- commands.Add(Command.CompactDisc);
- break;
- case Flag.AtariJaguar:
- commands.Add(Command.CompactDisc);
- break;
- case Flag.BEOpcode:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.C2Opcode:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.CopyrightManagementInformation:
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.D8Opcode:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.DisableBeep:
- commands.Add(Command.Audio);
- commands.Add(Command.BluRay);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.DigitalVideoDisc);
- commands.Add(Command.GDROM);
- commands.Add(Command.SACD);
- commands.Add(Command.Swap);
- commands.Add(Command.XBOX);
- commands.Add(Command.XBOXSwap);
- commands.Add(Command.XGD2Swap);
- commands.Add(Command.XGD3Swap);
- break;
- case Flag.ExtractMicroSoftCabFile:
- commands.Add(Command.CompactDisc);
- break;
- case Flag.Fix:
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.ForceUnitAccess:
- commands.Add(Command.Audio);
- commands.Add(Command.BluRay);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.DigitalVideoDisc);
- commands.Add(Command.GDROM);
- commands.Add(Command.SACD);
- commands.Add(Command.Swap);
- commands.Add(Command.XBOX);
- commands.Add(Command.XBOXSwap);
- commands.Add(Command.XGD2Swap);
- commands.Add(Command.XGD3Swap);
- break;
- case Flag.MultiSectorRead:
- commands.Add(Command.CompactDisc);
- break;
- case Flag.MultiSession:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.Swap);
- break;
- case Flag.NoFixSubP:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.NoFixSubQ:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.NoFixSubQLibCrypt:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.NoFixSubQSecuROM:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.NoFixSubRtoW:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.NoSkipSS:
- commands.Add(Command.BluRay);
- commands.Add(Command.XBOX);
- commands.Add(Command.XBOXSwap);
- commands.Add(Command.XGD2Swap);
- commands.Add(Command.XGD3Swap);
- break;
- case Flag.PadSector:
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.Raw:
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.Resume:
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.Reverse:
- commands.Add(Command.Audio);
- commands.Add(Command.Data);
- commands.Add(Command.DigitalVideoDisc);
- break;
- case Flag.ScanAntiMod:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.Swap);
- break;
- case Flag.ScanFileProtect:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.DigitalVideoDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.ScanSectorProtect:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.Swap);
- break;
- case Flag.SeventyFour:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.SkipSector:
- commands.Add(Command.Audio);
- commands.Add(Command.Data);
- break;
- case Flag.SubchannelReadLevel:
- commands.Add(Command.Audio);
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Data);
- commands.Add(Command.GDROM);
- commands.Add(Command.Swap);
- break;
- case Flag.UseAnchorVolumeDescriptorPointer:
- commands.Add(Command.BluRay);
- commands.Add(Command.DigitalVideoDisc);
- commands.Add(Command.XBOX);
- break;
- case Flag.VideoNow:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.VideoNowColor:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
- case Flag.VideoNowXP:
- commands.Add(Command.CompactDisc);
- commands.Add(Command.Swap);
- break;
-
- case Flag.NONE:
- default:
- return commands;
- }
-
- return commands;
- }
-
///
/// Set the DIC command to be used for a given system and media type
///
@@ -2528,7 +2303,7 @@ namespace MPF.DiscImageCreator
// If we have an invalid combination, we should BaseCommand = null
if (!Validators.GetValidMediaTypes(system).Contains(type))
{
- BaseCommand = Command.NONE;
+ BaseCommand = null;
return;
}
@@ -2536,46 +2311,46 @@ namespace MPF.DiscImageCreator
{
case MediaType.CDROM:
if (system == KnownSystem.SuperAudioCD)
- BaseCommand = Command.SACD;
+ BaseCommand = CommandStrings.SACD;
else
- BaseCommand = Command.CompactDisc;
+ BaseCommand = CommandStrings.CompactDisc;
return;
case MediaType.DVD:
if (system == KnownSystem.MicrosoftXBOX
|| system == KnownSystem.MicrosoftXBOX360)
{
- BaseCommand = Command.XBOX;
+ BaseCommand = CommandStrings.XBOX;
return;
}
- BaseCommand = Command.DigitalVideoDisc;
+ BaseCommand = CommandStrings.DigitalVideoDisc;
return;
case MediaType.GDROM:
- BaseCommand = Command.GDROM;
+ BaseCommand = CommandStrings.GDROM;
return;
case MediaType.HDDVD:
- BaseCommand = Command.DigitalVideoDisc;
+ BaseCommand = CommandStrings.DigitalVideoDisc;
return;
case MediaType.BluRay:
- BaseCommand = Command.BluRay;
+ BaseCommand = CommandStrings.BluRay;
return;
case MediaType.NintendoGameCubeGameDisc:
- BaseCommand = Command.DigitalVideoDisc;
+ BaseCommand = CommandStrings.DigitalVideoDisc;
return;
case MediaType.NintendoWiiOpticalDisc:
- BaseCommand = Command.DigitalVideoDisc;
+ BaseCommand = CommandStrings.DigitalVideoDisc;
return;
case MediaType.FloppyDisk:
- BaseCommand = Command.Floppy;
+ BaseCommand = CommandStrings.Floppy;
return;
case MediaType.HardDisk:
- BaseCommand = Command.Disk;
+ BaseCommand = CommandStrings.Disk;
return;
case MediaType.DataCartridge:
- BaseCommand = Command.Tape;
+ BaseCommand = CommandStrings.Tape;
return;
default:
- BaseCommand = Command.NONE;
+ BaseCommand = null;
return;
}
}
diff --git a/MPF.Library/UmdImageCreator/Parameters.cs b/MPF.Library/UmdImageCreator/Parameters.cs
index 5682d259..f8b0bcf7 100644
--- a/MPF.Library/UmdImageCreator/Parameters.cs
+++ b/MPF.Library/UmdImageCreator/Parameters.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using MPF.Data;
-using MPF.Utilities;
namespace MPF.UmdImageCreator
{
diff --git a/MPF.Test/Utilities/ConvertersTest.cs b/MPF.Test/Utilities/ConvertersTest.cs
index a7d28ac1..b098fef7 100644
--- a/MPF.Test/Utilities/ConvertersTest.cs
+++ b/MPF.Test/Utilities/ConvertersTest.cs
@@ -15,48 +15,48 @@ namespace MPF.Test.Utilities
public static IEnumerable