Replace Aaru pre-command flags

This commit is contained in:
Matt Nadareski
2024-12-05 00:06:24 -05:00
parent 5392afbf06
commit 5e5360441a
4 changed files with 202 additions and 147 deletions

View File

@@ -32,6 +32,7 @@
- Handle issue with old .NET
- Let inputs read equal-separated values
- Fix some formatting issues with Input types
- Replace Aaru pre-command flags
### 3.2.4 (2024-11-24)

View File

@@ -0,0 +1,43 @@
using MPF.ExecutionContexts.Aaru;
using SabreTools.RedumpLib.Data;
using Xunit;
namespace MPF.ExecutionContexts.Test
{
public class AaruTests
{
#region Converters.Extension
[Theory]
[InlineData(null, ".aaruf")]
[InlineData(MediaType.CDROM, ".aaruf")]
[InlineData(MediaType.GDROM, ".aaruf")]
[InlineData(MediaType.DVD, ".aaruf")]
[InlineData(MediaType.HDDVD, ".aaruf")]
[InlineData(MediaType.BluRay, ".aaruf")]
[InlineData(MediaType.FloppyDisk, ".aaruf")]
[InlineData(MediaType.HardDisk, ".aaruf")]
[InlineData(MediaType.ApertureCard, ".aaruf")]
public void ExtensionTest(MediaType? type, string expected)
{
string actual = Converters.Extension(type);
Assert.Equal(expected, actual);
}
#endregion
/// <summary>
/// Ensure pre-command flags can all be set properly
/// </summary>
[Theory]
[InlineData("--debug --help --verbose --version formats")]
[InlineData("--debug true --help true --verbose true --version true formats")]
public void PreCommandFlagsTest(string parameters)
{
string? expected = "--debug true --help true --verbose true --version true formats";
var context = new ExecutionContext(parameters);
string? actual = context.GenerateParameters();
Assert.Equal(expected, actual);
}
}
}

View File

@@ -22,7 +22,11 @@ namespace MPF.ExecutionContexts.Aaru
public override int? Speed
{
get { return SpeedValue; }
set { SpeedValue = (sbyte?)value; }
set
{
SpeedValue = (sbyte?)value;
(_inputs[FlagStrings.SpeedLong] as Int8Input)?.SetValue((sbyte?)value);
}
}
#endregion
@@ -109,12 +113,121 @@ namespace MPF.ExecutionContexts.Aaru
public string? XMLSidecarValue { get; set; }
#endregion
/// <summary>
/// Set of all pre-command flags
/// </summary>
private readonly Dictionary<string, BooleanInput> _preCommandInputs = new()
{
[FlagStrings.DebugLong] = new BooleanInput(FlagStrings.DebugShort, FlagStrings.DebugLong, required: false),
[FlagStrings.HelpLong] = new BooleanInput(FlagStrings.HelpShort, FlagStrings.HelpLong, required: false),
[FlagStrings.HelpShortAlt] = new BooleanInput(FlagStrings.HelpShortAlt, FlagStrings.HelpLong, required: false),
[FlagStrings.VerboseLong] = new BooleanInput(FlagStrings.VerboseShort, FlagStrings.VerboseLong, required: false),
[FlagStrings.VersionLong] = new BooleanInput(FlagStrings.VersionLong, required: false),
};
/// <summary>
/// Set of inputs to use for this context
/// Set of all command flags
/// </summary>
private readonly List<Input> _inputs = FlagStrings.GetInputs();
private readonly Dictionary<string, Input> _inputs = new()
{
// Boolean flags
[FlagStrings.Adler32Long] = new BooleanInput(FlagStrings.Adler32Short, FlagStrings.Adler32Long, required: false),
[FlagStrings.ClearLong] = new BooleanInput(FlagStrings.ClearLong, required: false),
[FlagStrings.ClearAllLong] = new BooleanInput(FlagStrings.ClearAllLong, required: false),
[FlagStrings.CRC16Long] = new BooleanInput(FlagStrings.CRC16Long, required: false),
[FlagStrings.CRC32Long] = new BooleanInput(FlagStrings.CRC32Short, FlagStrings.CRC32Long, required: false),
[FlagStrings.CRC64Long] = new BooleanInput(FlagStrings.CRC64Long, required: false),
[FlagStrings.DiskTagsLong] = new BooleanInput(FlagStrings.DiskTagsShort, FlagStrings.DiskTagsLong, required: false),
[FlagStrings.DuplicatedSectorsLong] = new BooleanInput(FlagStrings.DuplicatedSectorsShort, FlagStrings.DuplicatedSectorsLong, required: false),
[FlagStrings.EjectLong] = new BooleanInput(FlagStrings.EjectLong, required: false),
[FlagStrings.ExtendedAttributesLong] = new BooleanInput(FlagStrings.ExtendedAttributesShort, FlagStrings.ExtendedAttributesLong, required: false),
[FlagStrings.FilesystemsLong] = new BooleanInput(FlagStrings.FilesystemsShort, FlagStrings.FilesystemsLong, required: false),
[FlagStrings.FirstPregapLong] = new BooleanInput(FlagStrings.FirstPregapLong, required: false),
[FlagStrings.FixOffsetLong] = new BooleanInput(FlagStrings.FixOffsetLong, required: false),
[FlagStrings.FixSubchannelLong] = new BooleanInput(FlagStrings.FixSubchannelLong, required: false),
[FlagStrings.FixSubchannelCrcLong] = new BooleanInput(FlagStrings.FixSubchannelCrcLong, required: false),
[FlagStrings.FixSubchannelPositionLong] = new BooleanInput(FlagStrings.FixSubchannelPositionLong, required: false),
[FlagStrings.Fletcher16Long] = new BooleanInput(FlagStrings.Fletcher16Long, required: false),
[FlagStrings.Fletcher32Long] = new BooleanInput(FlagStrings.Fletcher32Long, required: false),
[FlagStrings.ForceLong] = new BooleanInput(FlagStrings.ForceShort, FlagStrings.ForceLong, required: false),
[FlagStrings.GenerateSubchannelsLong] = new BooleanInput(FlagStrings.GenerateSubchannelsLong, required: false),
[FlagStrings.LongFormatLong] = new BooleanInput(FlagStrings.LongFormatShort, FlagStrings.LongFormatLong, required: false),
[FlagStrings.LongSectorsLong] = new BooleanInput(FlagStrings.LongSectorsShort, FlagStrings.LongSectorsLong, required: false),
[FlagStrings.MD5Long] = new BooleanInput(FlagStrings.MD5Short, FlagStrings.MD5Long, required: false),
[FlagStrings.MetadataLong] = new BooleanInput(FlagStrings.MetadataLong, required: false),
[FlagStrings.PartitionsLong] = new BooleanInput(FlagStrings.PartitionsShort, FlagStrings.PartitionsLong, required: false),
[FlagStrings.PauseLong] = new BooleanInput(FlagStrings.PauseLong, required: false),
[FlagStrings.PersistentLong] = new BooleanInput(FlagStrings.PersistentLong, required: false),
[FlagStrings.PrivateLong] = new BooleanInput(FlagStrings.PrivateLong, required: false),
[FlagStrings.ResumeLong] = new BooleanInput(FlagStrings.ResumeShort, FlagStrings.ResumeLong, required: false),
[FlagStrings.RetrySubchannelLong] = new BooleanInput(FlagStrings.RetrySubchannelLong, required: false),
[FlagStrings.SectorTagsLong] = new BooleanInput(FlagStrings.SectorTagsShort, FlagStrings.SectorTagsLong, required: false),
[FlagStrings.SeparatedTracksLong] = new BooleanInput(FlagStrings.SeparatedTracksShort, FlagStrings.SeparatedTracksLong, required: false),
[FlagStrings.SHA1Long] = new BooleanInput(FlagStrings.SHA1Short, FlagStrings.SHA1Long, required: false),
[FlagStrings.SHA256Long] = new BooleanInput(FlagStrings.SHA256Long, required: false),
[FlagStrings.SHA384Long] = new BooleanInput(FlagStrings.SHA384Long, required: false),
[FlagStrings.SHA512Long] = new BooleanInput(FlagStrings.SHA512Long, required: false),
[FlagStrings.SkipCdiReadyHoleLong] = new BooleanInput(FlagStrings.SkipCdiReadyHoleLong, required: false),
[FlagStrings.SpamSumLong] = new BooleanInput(FlagStrings.SpamSumShort, FlagStrings.SpamSumLong, required: false),
[FlagStrings.StopOnErrorLong] = new BooleanInput(FlagStrings.StopOnErrorShort, FlagStrings.StopOnErrorLong, required: false),
[FlagStrings.StoreEncryptedLong] = new BooleanInput(FlagStrings.StoreEncryptedLong, required: false),
[FlagStrings.TapeLong] = new BooleanInput(FlagStrings.TapeShort, FlagStrings.TapeLong, required: false),
[FlagStrings.TitleKeysLong] = new BooleanInput(FlagStrings.TitleKeysLong, required: false),
[FlagStrings.TrapDiscLong] = new BooleanInput(FlagStrings.TrapDiscShort, FlagStrings.TrapDiscLong, required: false),
[FlagStrings.TrimLong] = new BooleanInput(FlagStrings.TrimLong, required: false),
[FlagStrings.UseBufferedReadsLong] = new BooleanInput(FlagStrings.UseBufferedReadsLong, required: false),
[FlagStrings.VerifyDiscLong] = new BooleanInput(FlagStrings.VerifyDiscShort, FlagStrings.VerifyDiscLong, required: false),
[FlagStrings.VerifySectorsLong] = new BooleanInput(FlagStrings.VerifySectorsShort, FlagStrings.VerifySectorsLong, required: false),
[FlagStrings.WholeDiscLong] = new BooleanInput(FlagStrings.WholeDiscShort, FlagStrings.WholeDiscLong, required: false),
// Int8 flags
[FlagStrings.SpeedLong] = new Int8Input(FlagStrings.SpeedLong),
// Int16 flags
[FlagStrings.RetryPassesLong] = new Int16Input(FlagStrings.RetryPassesShort, FlagStrings.RetryPassesLong),
[FlagStrings.WidthLong] = new Int16Input(FlagStrings.WidthShort, FlagStrings.WidthLong),
// Int32 flags
[FlagStrings.BlockSizeLong] = new Int32Input(FlagStrings.BlockSizeShort, FlagStrings.BlockSizeLong),
[FlagStrings.CountLong] = new Int32Input(FlagStrings.CountShort, FlagStrings.CountLong),
[FlagStrings.MaxBlocksLong] = new Int32Input(FlagStrings.MaxBlocksLong),
[FlagStrings.MediaLastSequenceLong] = new Int32Input(FlagStrings.MediaLastSequenceLong),
[FlagStrings.MediaSequenceLong] = new Int32Input(FlagStrings.MediaSequenceLong),
[FlagStrings.SkipLong] = new Int32Input(FlagStrings.SkipShort, FlagStrings.SkipLong),
// Int64 flags
//[FlagStrings.LengthLong] = new Int64Input(FlagStrings.LengthShort, FlagStrings.LengthLong),
[FlagStrings.LengthLong] = new StringInput(FlagStrings.LengthShort, FlagStrings.LengthLong),
[FlagStrings.StartLong] = new Int64Input(FlagStrings.StartShort, FlagStrings.StartLong),
// String flags
[FlagStrings.CommentsLong] = new StringInput(FlagStrings.CommentsLong),
[FlagStrings.CreatorLong] = new StringInput(FlagStrings.CreatorLong),
[FlagStrings.DriveManufacturerLong] = new StringInput(FlagStrings.DriveManufacturerLong),
[FlagStrings.DriveModelLong] = new StringInput(FlagStrings.DriveModelLong),
[FlagStrings.DriveRevisionLong] = new StringInput(FlagStrings.DriveRevisionLong),
[FlagStrings.DriveSerialLong] = new StringInput(FlagStrings.DriveSerialLong),
[FlagStrings.EncodingLong] = new StringInput(FlagStrings.EncodingShort, FlagStrings.EncodingLong),
[FlagStrings.FormatConvertLong] = new StringInput(FlagStrings.FormatConvertShort, FlagStrings.FormatConvertLong),
[FlagStrings.FormatDumpLong] = new StringInput(FlagStrings.FormatDumpShort, FlagStrings.FormatDumpLong),
[FlagStrings.GeometryLong] = new StringInput(FlagStrings.GeometryShort, FlagStrings.GeometryLong),
[FlagStrings.ImgBurnLogLong] = new StringInput(FlagStrings.ImgBurnLogShort, FlagStrings.ImgBurnLogLong),
[FlagStrings.MediaBarcodeLong] = new StringInput(FlagStrings.MediaBarcodeLong),
[FlagStrings.MediaManufacturerLong] = new StringInput(FlagStrings.MediaManufacturerLong),
[FlagStrings.MediaModelLong] = new StringInput(FlagStrings.MediaModelLong),
[FlagStrings.MediaPartNumberLong] = new StringInput(FlagStrings.MediaPartNumberLong),
[FlagStrings.MediaSerialLong] = new StringInput(FlagStrings.MediaSerialLong),
[FlagStrings.MediaTitleLong] = new StringInput(FlagStrings.MediaTitleLong),
[FlagStrings.MHDDLogLong] = new StringInput(FlagStrings.MHDDLogShort, FlagStrings.MHDDLogLong),
[FlagStrings.NamespaceLong] = new StringInput(FlagStrings.NamespaceShort, FlagStrings.NamespaceLong),
[FlagStrings.OptionsLong] = new StringInput(FlagStrings.OptionsShort, FlagStrings.OptionsLong),
[FlagStrings.OutputPrefixLong] = new StringInput(FlagStrings.OutputPrefixShort, FlagStrings.OutputPrefixLong),
[FlagStrings.ResumeFileLong] = new StringInput(FlagStrings.ResumeFileShort, FlagStrings.ResumeFileLong),
[FlagStrings.SubchannelLong] = new StringInput(FlagStrings.SubchannelLong),
[FlagStrings.XMLSidecarLong] = new StringInput(FlagStrings.XMLSidecarShort, FlagStrings.XMLSidecarLong),
};
#endregion
/// <inheritdoc/>
public ExecutionContext(string? parameters) : base(parameters) { }
@@ -431,30 +544,20 @@ namespace MPF.ExecutionContexts.Aaru
#region Pre-command flags
// Debug
if (this[FlagStrings.DebugLong] != null)
parameters.Add($"{FlagStrings.DebugLong} {this[FlagStrings.DebugLong]}");
foreach (var kvp in _preCommandInputs)
{
// If the value doesn't exist
string formatted = kvp.Value.Format(useEquals: false);
if (formatted.Length == 0)
continue;
// Pause
if (this[FlagStrings.PauseLong] != null)
parameters.Add($"{FlagStrings.PauseLong} {this[FlagStrings.PauseLong]}");
// Verbose
if (this[FlagStrings.VerboseLong] != null)
parameters.Add($"{FlagStrings.VerboseLong} {this[FlagStrings.VerboseLong]}");
// Version
if (this[FlagStrings.VersionLong] != null)
parameters.Add($"{FlagStrings.VersionLong} {this[FlagStrings.VersionLong]}");
// Help
if (this[FlagStrings.HelpLong] != null)
parameters.Add($"{FlagStrings.HelpLong} {this[FlagStrings.HelpLong]}");
// Append the parameter
parameters.Add(formatted);
}
#endregion
BaseCommand ??= CommandStrings.NONE;
if (!string.IsNullOrEmpty(BaseCommand))
parameters.Add(BaseCommand);
else
@@ -1217,6 +1320,7 @@ namespace MPF.ExecutionContexts.Aaru
{
this[FlagStrings.SpeedLong] = true;
SpeedValue = (sbyte?)driveSpeed;
(_inputs[FlagStrings.SpeedLong] as Int8Input)?.SetValue((sbyte)driveSpeed);
}
// First check to see if the combination of system and MediaType is valid
@@ -1230,17 +1334,30 @@ namespace MPF.ExecutionContexts.Aaru
{
this[FlagStrings.RetryPassesLong] = true;
RetryPassesValue = (short)rereadCount;
(_inputs[FlagStrings.RetryPassesLong] as Int16Input)?.SetValue((short)rereadCount);
}
// Set user-defined options
if (GetBooleanSetting(options, SettingConstants.EnableDebug, SettingConstants.EnableDebugDefault))
{
this[FlagStrings.DebugLong] = true;
_preCommandInputs[FlagStrings.DebugLong].SetValue(true);
}
if (GetBooleanSetting(options, SettingConstants.EnableVerbose, SettingConstants.EnableVerboseDefault))
{
this[FlagStrings.VerboseLong] = true;
_preCommandInputs[FlagStrings.VerboseLong].SetValue(true);
}
if (GetBooleanSetting(options, SettingConstants.ForceDumping, SettingConstants.ForceDumpingDefault))
{
this[FlagStrings.ForceLong] = true;
(_inputs[FlagStrings.ForceLong] as BooleanInput)?.SetValue(true);
}
if (GetBooleanSetting(options, SettingConstants.StripPersonalData, SettingConstants.StripPersonalDataDefault))
{
this[FlagStrings.PrivateLong] = true;
(_inputs[FlagStrings.PrivateLong] as BooleanInput)?.SetValue(true);
}
// 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
@@ -1251,21 +1368,30 @@ namespace MPF.ExecutionContexts.Aaru
break;
case SabreTools.RedumpLib.Data.MediaType.DVD:
this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable
(_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TrimLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true);
break;
case SabreTools.RedumpLib.Data.MediaType.GDROM:
// Currently no defaults set
break;
case SabreTools.RedumpLib.Data.MediaType.HDDVD:
this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable
(_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TrimLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true);
break;
case SabreTools.RedumpLib.Data.MediaType.BluRay:
this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable
(_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true);
this[FlagStrings.TrimLong] = true; // TODO: Make this configurable
(_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true);
break;
// Special Formats
@@ -1302,21 +1428,16 @@ namespace MPF.ExecutionContexts.Aaru
// Keep a count of keys to determine if we should break out to command handling or not
int keyCount = Keys.Count;
// Debug
ProcessBooleanParameter(parts, FlagStrings.DebugShort, FlagStrings.DebugLong, ref start, true);
foreach (var kvp in _preCommandInputs)
{
// If the value was not a match
if (!kvp.Value.Process(parts, ref start))
continue;
// Pause
ProcessBooleanParameter(parts, null, FlagStrings.PauseLong, ref start, true);
// Verbose
ProcessBooleanParameter(parts, FlagStrings.VerboseShort, FlagStrings.VerboseLong, ref start, true);
// Version
ProcessBooleanParameter(parts, null, FlagStrings.VersionLong, ref start, true);
// Help
ProcessBooleanParameter(parts, FlagStrings.HelpShort, FlagStrings.HelpLong, ref start, true);
ProcessBooleanParameter(parts, FlagStrings.HelpShortAlt, FlagStrings.HelpLong, ref start, true);
// Set the flag
this[kvp.Key] = true;
break;
}
// If we didn't add any new flags, break out since we might be at command handling
if (keyCount == Keys.Count)

View File

@@ -1,6 +1,3 @@
using System.Collections.Generic;
using MPF.ExecutionContexts.Data;
namespace MPF.ExecutionContexts.Aaru
{
/// <summary>
@@ -8,113 +5,6 @@ namespace MPF.ExecutionContexts.Aaru
/// </summary>
public static class FlagStrings
{
/// <summary>
/// Get all available input types
/// </summary>
public static List<Input> GetInputs()
{
return [
// Boolean flags
new BooleanInput(Adler32Short, Adler32Long, required: false),
new BooleanInput(ClearLong, required: false),
new BooleanInput(ClearAllLong, required: false),
new BooleanInput(CRC16Long, required: false),
new BooleanInput(CRC32Short, CRC32Long, required: false),
new BooleanInput(CRC64Long, required: false),
new BooleanInput(DebugShort, DebugLong, required: false),
new BooleanInput(DiskTagsShort, DiskTagsLong, required: false),
new BooleanInput(DuplicatedSectorsShort, DuplicatedSectorsLong, required: false),
new BooleanInput(EjectLong, required: false),
new BooleanInput(ExtendedAttributesShort, ExtendedAttributesLong, required: false),
new BooleanInput(FilesystemsShort, FilesystemsLong, required: false),
new BooleanInput(FirstPregapLong, required: false),
new BooleanInput(FixOffsetLong, required: false),
new BooleanInput(FixSubchannelLong, required: false),
new BooleanInput(FixSubchannelCrcLong, required: false),
new BooleanInput(FixSubchannelPositionLong, required: false),
new BooleanInput(Fletcher16Long, required: false),
new BooleanInput(Fletcher32Long, required: false),
new BooleanInput(ForceShort, ForceLong, required: false),
new BooleanInput(GenerateSubchannelsLong, required: false),
new BooleanInput(HelpShort, HelpLong, required: false), // HelpShortAlt
new BooleanInput(LongFormatShort, LongFormatLong, required: false),
new BooleanInput(LongSectorsShort, LongSectorsLong, required: false),
new BooleanInput(MD5Short, MD5Long, required: false),
new BooleanInput(MetadataLong, required: false),
new BooleanInput(PartitionsShort, PartitionsLong, required: false),
new BooleanInput(PauseLong, required: false),
new BooleanInput(PersistentLong, required: false),
new BooleanInput(PrivateLong, required: false),
new BooleanInput(ResumeShort, ResumeLong, required: false),
new BooleanInput(RetrySubchannelLong, required: false),
new BooleanInput(SectorTagsShort, SectorTagsLong, required: false),
new BooleanInput(SeparatedTracksShort, SeparatedTracksLong, required: false),
new BooleanInput(SHA1Short, SHA1Long, required: false),
new BooleanInput(SHA256Long, required: false),
new BooleanInput(SHA384Long, required: false),
new BooleanInput(SHA512Long, required: false),
new BooleanInput(SkipCdiReadyHoleLong, required: false),
new BooleanInput(SpamSumShort, SpamSumLong, required: false),
new BooleanInput(StopOnErrorShort, StopOnErrorLong, required: false),
new BooleanInput(StoreEncryptedLong, required: false),
new BooleanInput(TapeShort, TapeLong, required: false),
new BooleanInput(TitleKeysLong, required: false),
new BooleanInput(TrapDiscShort, TrapDiscLong, required: false),
new BooleanInput(TrimLong, required: false),
new BooleanInput(UseBufferedReadsLong, required: false),
new BooleanInput(VerboseShort, VerboseLong, required: false),
new BooleanInput(VerifyDiscShort, VerifyDiscLong, required: false),
new BooleanInput(VerifySectorsShort, VerifySectorsLong, required: false),
new BooleanInput(VersionLong, required: false),
new BooleanInput(WholeDiscShort, WholeDiscLong, required: false),
// Int8 flags
new Int8Input(SpeedLong),
// Int16 flags
new Int16Input(RetryPassesShort, RetryPassesLong),
new Int16Input(WidthShort, WidthLong),
// Int32 flags
new Int32Input(BlockSizeShort, BlockSizeLong),
new Int32Input(CountShort, CountLong),
new Int32Input(MaxBlocksLong),
new Int32Input(MediaLastSequenceLong),
new Int32Input(MediaSequenceLong),
new Int32Input(SkipShort, SkipLong),
// Int64 flags
new Int64Input(LengthShort, LengthLong),
new Int64Input(StartShort, StartLong),
// String flags
new StringInput(CommentsLong),
new StringInput(CreatorLong),
new StringInput(DriveManufacturerLong),
new StringInput(DriveModelLong),
new StringInput(DriveRevisionLong),
new StringInput(DriveSerialLong),
new StringInput(EncodingShort, EncodingLong),
new StringInput(FormatConvertShort, FormatConvertLong),
new StringInput(FormatDumpShort, FormatDumpLong),
new StringInput(GeometryShort, GeometryLong),
new StringInput(ImgBurnLogShort, ImgBurnLogLong),
new StringInput(MediaBarcodeLong),
new StringInput(MediaManufacturerLong),
new StringInput(MediaModelLong),
new StringInput(MediaPartNumberLong),
new StringInput(MediaSerialLong),
new StringInput(MediaTitleLong),
new StringInput(MHDDLogShort, MHDDLogLong),
new StringInput(NamespaceShort, NamespaceLong),
new StringInput(OptionsShort, OptionsLong),
new StringInput(OutputPrefixShort, OutputPrefixLong),
new StringInput(ResumeFileShort, ResumeFileLong),
new StringInput(SubchannelLong),
new StringInput(XMLSidecarShort, XMLSidecarLong),
];
}
#region Boolean flags
public const string Adler32Short = "-a";