mirror of
https://github.com/SabreTools/MPF.git
synced 2026-02-04 05:35:52 +00:00
Compare commits
102 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1148f80c8 | ||
|
|
632654d00b | ||
|
|
a6d6b800a5 | ||
|
|
8527cc5746 | ||
|
|
f94f54f4d7 | ||
|
|
2091ef1d92 | ||
|
|
af865bca9e | ||
|
|
23588fa5ae | ||
|
|
e763fec01e | ||
|
|
732ff2ccca | ||
|
|
f960aca8a9 | ||
|
|
335c1388d4 | ||
|
|
87c0d5b44b | ||
|
|
1a44fb5c8a | ||
|
|
285921cae3 | ||
|
|
2255dba640 | ||
|
|
99158f31c9 | ||
|
|
53a2ef227b | ||
|
|
c0efc63741 | ||
|
|
905bd1a7dc | ||
|
|
5d49d4833f | ||
|
|
8fd3e2d405 | ||
|
|
1521a918f3 | ||
|
|
5f580ee025 | ||
|
|
9c7cee0aa3 | ||
|
|
d549609a0f | ||
|
|
207fdbb49c | ||
|
|
63e63a0033 | ||
|
|
73be55a645 | ||
|
|
d913aa247e | ||
|
|
d9a9f3bfd4 | ||
|
|
ea3e040b3f | ||
|
|
ed67522675 | ||
|
|
6e3902bbb1 | ||
|
|
3f802e8548 | ||
|
|
c3c4cf6e5b | ||
|
|
39258c4e85 | ||
|
|
df81259fba | ||
|
|
a835c81951 | ||
|
|
af4f3e8444 | ||
|
|
085916e1e6 | ||
|
|
557354c844 | ||
|
|
a23a74ffa4 | ||
|
|
958aeeae32 | ||
|
|
c73ff42500 | ||
|
|
24a93e298b | ||
|
|
ae81bb0743 | ||
|
|
cf7863fbb2 | ||
|
|
5e0e71120d | ||
|
|
5adbdd29e6 | ||
|
|
fd855b9024 | ||
|
|
17c283ff67 | ||
|
|
a37e6aaf18 | ||
|
|
1dbf23ca95 | ||
|
|
2e52d00107 | ||
|
|
eb69b74b4a | ||
|
|
db4a785558 | ||
|
|
9bdd2d6951 | ||
|
|
de48c8f0f9 | ||
|
|
c59f7c2dae | ||
|
|
2740a6a1c1 | ||
|
|
56e8470069 | ||
|
|
a5f1a12aee | ||
|
|
8749b486a8 | ||
|
|
3446957f68 | ||
|
|
cb9813db3d | ||
|
|
6e6b716c18 | ||
|
|
400ef38c60 | ||
|
|
87d5fc0e66 | ||
|
|
d5d8ae0501 | ||
|
|
fae7a5254d | ||
|
|
97be13f020 | ||
|
|
dd0dfc5cf5 | ||
|
|
a7a295434d | ||
|
|
319f5563cb | ||
|
|
939174d8c4 | ||
|
|
1d5d7b265e | ||
|
|
a2ac7222f9 | ||
|
|
4f0b5904c3 | ||
|
|
7ff848347c | ||
|
|
a1c89d17b8 | ||
|
|
3575c43703 | ||
|
|
928c9966fa | ||
|
|
a404a270f1 | ||
|
|
dfba97685a | ||
|
|
8de2f1c9bb | ||
|
|
f57b29615b | ||
|
|
565a9bb09a | ||
|
|
d9d61cf665 | ||
|
|
106f16d703 | ||
|
|
8b600a6a35 | ||
|
|
b251ae7927 | ||
|
|
3a749b67e3 | ||
|
|
3abc277aab | ||
|
|
894f2c6fde | ||
|
|
8c43615235 | ||
|
|
bbf51a7f94 | ||
|
|
515e58fae8 | ||
|
|
f3319f4ee2 | ||
|
|
e2789ddd11 | ||
|
|
1c04f6e30c | ||
|
|
c7d4d319ce |
@@ -1,6 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
<appSettings>
|
||||
<add key="dicPath" value="Programs\DiscImageCreator.exe"/>
|
||||
<add key="psxt001zPath" value="psxt001z.exe"/>
|
||||
<add key="sgRawPath" value="sg_raw.exe"/>
|
||||
<add key="defaultOutputPath" value="ISO"/>
|
||||
</appSettings>
|
||||
</configuration>
|
||||
102
Constants.cs
Normal file
102
Constants.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
namespace DICUI
|
||||
{
|
||||
public static class UIElements
|
||||
{
|
||||
public const string StartDumping = "Start Dumping";
|
||||
public const string StopDumping = "Stop Dumping";
|
||||
}
|
||||
|
||||
public static class DICCommands
|
||||
{
|
||||
// Commands
|
||||
|
||||
public const string CompactDiscCommand = "cd";
|
||||
public const string DataCommand = "data";
|
||||
public const string AudioCommand = "audio";
|
||||
public const string GDROMCommand = "gd";
|
||||
public const string GDROMSwapCommand = "swap";
|
||||
public const string DVDCommand = "dvd";
|
||||
public const string BDCommand = "bd";
|
||||
public const string FloppyCommand = "fd";
|
||||
public const string StopCommand = "stop";
|
||||
public const string StartCommand = "start";
|
||||
public const string EjectCommand = "eject";
|
||||
public const string CloseCommand = "close";
|
||||
public const string ResetCommand = "reset";
|
||||
public const string SubCommand = "sub";
|
||||
public const string MDSCommand = "mds";
|
||||
public const string DriveSpeedCommand = "ls"; // Unlisted in help text
|
||||
|
||||
// DIC Flags
|
||||
|
||||
public const string ForceUnitAccessFlag = "/f";
|
||||
public const string DisableBeepFlag = "/q";
|
||||
public const string CDAddOffsetFlag = "/a";
|
||||
public const string CDBEOpcodeFlag = "/be";
|
||||
public const string CDD8OpcodeFlag = "/d8";
|
||||
public const string CDC2OpcodeFlag = "/c2";
|
||||
public const string CDMCNFlag = "/m";
|
||||
public const string CDAMSFFlag = "/p";
|
||||
public const string CDReverseFlag = "/r";
|
||||
public const string CDMultiSessionFlag = "/ms";
|
||||
public const string CDScanFileProtectFlag = "/sf";
|
||||
public const string CDScanSectorProtectFlag = "/ss";
|
||||
public const string CDScanAnitModFlag = "/am";
|
||||
public const string CDNoFixSubPFlag = "/np";
|
||||
public const string CDNoFixSubQFlag = "/nq";
|
||||
public const string CDNoFixSubRtoWFlag = "/nr";
|
||||
public const string CDNoFixSubQLibCryptFlag = "/nl";
|
||||
public const string CDNoFixSubQSecuROMFlag = "/ns";
|
||||
public const string CDSubchannelReadLevelFlag = "/s";
|
||||
public const string DVDCMIFlag = "/c";
|
||||
public const string DVDRawFlag = "/raw";
|
||||
}
|
||||
|
||||
public static class Template
|
||||
{
|
||||
// Manual information
|
||||
|
||||
public const string TitleField = "Title";
|
||||
public const string DiscNumberField = "Disc Number / Letter";
|
||||
public const string DiscTitleField = "Disc Title";
|
||||
public const string CategoryField = "Category";
|
||||
public const string RegionField = "Region";
|
||||
public const string LanguagesField = "Languages";
|
||||
public const string DiscSerialField = "Disc Serial";
|
||||
public const string BarcodeField = "Barcode";
|
||||
public const string ISBNField = "ISBN";
|
||||
public const string CommentsField = "Comments";
|
||||
public const string ContentsField = "Contents";
|
||||
public const string VersionField = "Version";
|
||||
public const string EditionField = "Edition/Release";
|
||||
public const string CopyProtectionField = "Copy Protection";
|
||||
public const string MasteringRingField = "Mastering Ring";
|
||||
public const string MasteringSIDField = "Mastering SID Code";
|
||||
public const string MouldSIDField = "Mould SID Code";
|
||||
public const string AdditionalMouldField = "Additional Mould";
|
||||
public const string ToolstampField = "Toolstamp or Mastering Code";
|
||||
|
||||
// Automatic Information
|
||||
|
||||
public const string PVDField = "Primary Volume Descriptor (PVD)";
|
||||
public const string DATField = "DAT";
|
||||
public const string ErrorCountField = "Error Count";
|
||||
public const string CuesheetField = "Cuesheet";
|
||||
public const string SubIntentionField = "SubIntention (SecuROM)";
|
||||
public const string WriteOffsetField = "WriteOffset";
|
||||
public const string LayerbreakField = "Layerbreak";
|
||||
public const string PlaystationEXEDateField = "EXE Date"; // TODO: Not automatic yet
|
||||
public const string PlayStationEDCField = "EDC"; // TODO: Not automatic yet
|
||||
public const string PlayStationAntiModchipField = "Anti-modchip"; // TODO: Not automatic yet
|
||||
public const string PlayStationLibCryptField = "LibCrypt"; // TODO: Not automatic yet
|
||||
public const string SaturnHeaderField = "Header"; // TODO: Not automatic yet
|
||||
public const string SaturnBuildDateField = "Build Date"; // TODO: Not automatic yet
|
||||
|
||||
// Default values
|
||||
|
||||
public const string RequiredValue = "(REQUIRED)";
|
||||
public const string RequiredIfExistsValue = "(REQUIRED, IF EXISTS)";
|
||||
public const string OptionalValue = "(OPTIONAL)";
|
||||
public const string YesNoValue = "Yes/No";
|
||||
}
|
||||
}
|
||||
22
DICUI.csproj
22
DICUI.csproj
@@ -67,6 +67,7 @@
|
||||
<PropertyGroup />
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
@@ -87,6 +88,8 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Compile Include="Constants.cs" />
|
||||
<Compile Include="Utilities.cs" />
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -95,6 +98,7 @@
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Enumerations.cs" />
|
||||
<Compile Include="MainWindow.xaml.cs">
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
@@ -104,24 +108,6 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
|
||||
107
Enumerations.cs
Normal file
107
Enumerations.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
namespace DICUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Known disc types
|
||||
/// </summary>
|
||||
public enum DiscType
|
||||
{
|
||||
NONE = 0,
|
||||
CD,
|
||||
DVD5,
|
||||
DVD9,
|
||||
GDROM,
|
||||
HDDVD,
|
||||
BD25,
|
||||
BD50,
|
||||
|
||||
// Special Formats
|
||||
GameCubeGameDisc,
|
||||
UMD,
|
||||
|
||||
// Keeping this separate since it's currently unsupported in the UI
|
||||
Floppy = 99,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Known systems
|
||||
/// </summary>
|
||||
/// <remarks>Ensure that Utilities methods are updated as well</remarks>
|
||||
public enum KnownSystem
|
||||
{
|
||||
NONE = 0,
|
||||
|
||||
#region Consoles
|
||||
|
||||
BandaiPlaydiaQuickInteractiveSystem,
|
||||
BandaiApplePippin,
|
||||
CommodoreAmigaCD32,
|
||||
CommodoreAmigaCDTV,
|
||||
MattelHyperscan,
|
||||
MicrosoftXBOX,
|
||||
MicrosoftXBOX360,
|
||||
MicrosoftXBOXOne,
|
||||
NECPCEngineTurboGrafxCD,
|
||||
NECPCFX,
|
||||
NintendoGameCube,
|
||||
NintendoWii,
|
||||
NintendoWiiU,
|
||||
Panasonic3DOInteractiveMultiplayer,
|
||||
PhilipsCDi,
|
||||
SegaCDMegaCD,
|
||||
SegaDreamcast,
|
||||
SegaSaturn,
|
||||
SNKNeoGeoCD,
|
||||
SonyPlayStation,
|
||||
SonyPlayStation2,
|
||||
SonyPlayStation3,
|
||||
SonyPlayStation4,
|
||||
SonyPlayStationPortable,
|
||||
VMLabsNuon,
|
||||
VTechVFlashVSmilePro,
|
||||
ZAPiTGamesGameWaveFamilyEntertainmentSystem,
|
||||
|
||||
#endregion
|
||||
|
||||
#region Computers
|
||||
|
||||
AcornArchimedes,
|
||||
AppleMacintosh,
|
||||
CommodoreAmigaCD,
|
||||
FujitsuFMTowns,
|
||||
IBMPCCompatible,
|
||||
NECPC88,
|
||||
NECPC98,
|
||||
SharpX68000,
|
||||
|
||||
#endregion
|
||||
|
||||
#region Arcade
|
||||
|
||||
NamcoSegaNintendoTriforce,
|
||||
NamcoSystem246,
|
||||
SegaChihiro,
|
||||
SegaLindbergh,
|
||||
SegaNaomi,
|
||||
SegaNaomi2,
|
||||
TABAustriaQuizard,
|
||||
TandyMemorexVisualInformationSystem,
|
||||
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
|
||||
AudioCD,
|
||||
BDVideo,
|
||||
DVDVideo,
|
||||
EnhancedCD,
|
||||
PalmOS,
|
||||
PhilipsCDiDigitalVideo,
|
||||
PhotoCD,
|
||||
PlayStationGameSharkUpdates,
|
||||
TaoiKTV,
|
||||
TomyKissSite,
|
||||
VideoCD,
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
108
MainWindow.xaml
108
MainWindow.xaml
@@ -5,28 +5,33 @@
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:DICUI"
|
||||
mc:Ignorable="d"
|
||||
Title="Disc Image Creator GUI" Height="350" Width="500">
|
||||
Title="Disc Image Creator GUI" Height="450" Width="600">
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
<ColumnDefinition Width="4*"/>
|
||||
<ColumnDefinition Width="13*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="3*"/>
|
||||
<RowDefinition Height="30"/>
|
||||
<RowDefinition Height="4*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<ToolBarTray Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Height="30" HorizontalAlignment="Stretch" IsLocked="True">
|
||||
<ToolBar>
|
||||
<Button x:Name="tbr_Properties" Content="Properties" Command="Properties" Click="tbr_Properties_Click" CommandManager.CanExecute="tbr_Properties_CanExecute"/>
|
||||
</ToolBar>
|
||||
</ToolBarTray>
|
||||
<GroupBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,5,5.2,5.4" HorizontalAlignment="Stretch" Header="Settings"/>
|
||||
<GroupBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,4.6,5.2,4.8" HorizontalAlignment="Stretch" Header="Controls"/>
|
||||
<GroupBox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,5.2,5.2,4.8" HorizontalAlignment="Stretch" Header="Status"/>
|
||||
|
||||
|
||||
<GroupBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5" HorizontalAlignment="Stretch" Header="Informations Input"/>
|
||||
<GroupBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5" HorizontalAlignment="Stretch" Header="Control"/>
|
||||
<GroupBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="5" HorizontalAlignment="Stretch" Header="Status"/>
|
||||
|
||||
|
||||
<Grid Grid.Row="0" Grid.Column="0" Margin="15,25,15,10">
|
||||
<Grid Grid.Row="1" Grid.Column="0" Margin="15,25,15.2,10.4" Grid.ColumnSpan="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
<ColumnDefinition Width="3*"/>
|
||||
<ColumnDefinition Width="2.5*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
@@ -34,94 +39,51 @@
|
||||
<RowDefinition/>
|
||||
<RowDefinition/>
|
||||
<RowDefinition/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Grid.Row="0" Grid.Column="0" VerticalAlignment="Center">Disc Type</Label>
|
||||
<ComboBox x:Name="cmb_DiscType" Grid.Row="0" Grid.Column="1" Height="22" SelectionChanged="cmb_DiscType_SelectionChanged" />
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="0" VerticalAlignment="Center">Output Filename</Label>
|
||||
<TextBox x:Name="txt_OutputFilename" Grid.Row="1" Grid.Column="1" Height="22"></TextBox>
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0" VerticalAlignment="Center">Output Directory</Label>
|
||||
<TextBox x:Name="txt_OutputDirectory" Grid.Row="2" Grid.Column="1" Height="22" Width="345" HorizontalAlignment="left" Text="ISO" />
|
||||
<Button x:Name="btn_OutputDirectoryBrowse" Grid.Row="2" Grid.Column="1" Height="22" Width="50" HorizontalAlignment="Right" Content="Browse" Click="btn_OutputDirectoryBrowse_Click"/>
|
||||
|
||||
<Label Grid.Row="3" Grid.Column="0" VerticalAlignment="Center">Drive Letter</Label>
|
||||
<ComboBox x:Name="cmb_DriveLetter" Grid.Row="3" Grid.Column="1" Height="22" Width="397" HorizontalAlignment="left" SelectionChanged="cmb_DriveLetter_SelectionChanged"/>
|
||||
|
||||
<Label Grid.Row="4" Grid.Column="0" VerticalAlignment="Center">Drive Speed</Label>
|
||||
<ComboBox x:Name="cmb_DriveSpeed" Grid.Row="4" Grid.Column="1" Height="22" Width="60" HorizontalAlignment="left" SelectionChanged="cmb_DriveSpeed_SelectionChanged"/>
|
||||
|
||||
<ComboBox x:Name="CB_DiscType" Grid.Row="0" Grid.Column="1" Height="22" Text="Bandai Playdia Quick Interactive System" SelectionChanged="CB_DiscType_SelectionChanged">
|
||||
<ComboBoxItem Content="Unknown"/>
|
||||
<ComboBoxItem Content="---------- Consoles ----------" IsEnabled="False"/>
|
||||
<ComboBoxItem Content="Bandai Playdia Quick Interactive System"/>
|
||||
<ComboBoxItem Content="Bandai / Apple Pippin"/>
|
||||
<ComboBoxItem Content="Commodore Amiga CD / CD32 / CDTV"/>
|
||||
<ComboBoxItem Content="Mattel HyperScan"/>
|
||||
<ComboBoxItem Content="Microsoft XBOX One"/>
|
||||
<ComboBoxItem Content="NEC PC-Engine / TurboGrafx CD"/>
|
||||
<ComboBoxItem Content="NEC PC-FX / PC-FXGA"/>
|
||||
<ComboBoxItem Content="Panasonic 3DO"/>
|
||||
<ComboBoxItem Content="Philips CD-i"/>
|
||||
<ComboBoxItem Content="Sega CD / Mega CD"/>
|
||||
<ComboBoxItem Content="Sega Saturn"/>
|
||||
<ComboBoxItem Content="SNK Neo Geo CD"/>
|
||||
<ComboBoxItem Content="Sony PlayStation"/>
|
||||
<ComboBoxItem Content="Sony PlayStation 2 (CD-Rom)"/>
|
||||
<ComboBoxItem Content="Sony PlayStation 2 (DVD-Rom)"/>
|
||||
<ComboBoxItem Content="Sony PlayStation 4"/>
|
||||
<ComboBoxItem Content="VTech V.Flash - V.Smile Pro"/>
|
||||
<ComboBoxItem Content="---------- Computers ----------" IsEnabled="False"/>
|
||||
<ComboBoxItem Content="Apple Macintosh (CD-Rom)"/>
|
||||
<ComboBoxItem Content="Apple Macintosh (DVD-Rom)"/>
|
||||
<ComboBoxItem Content="Fujitsu FM Towns series"/>
|
||||
<ComboBoxItem Content="IBM PC Compatible (CD-Rom)"/>
|
||||
<ComboBoxItem Content="IBM PC Compatible (DVD-Rom)"/>
|
||||
<ComboBoxItem Content="NEC PC-88"/>
|
||||
<ComboBoxItem Content="NEC PC-98"/>
|
||||
<ComboBoxItem Content="---------- Arcade ----------" IsEnabled="False"/>
|
||||
<ComboBoxItem Content="Sega Lindbergh"/>
|
||||
<ComboBoxItem Content="---------- Others ----------" IsEnabled="False"/>
|
||||
<ComboBoxItem Content="Audio CD"/>
|
||||
<ComboBoxItem Content="BD-Video"/>
|
||||
<ComboBoxItem Content="DVD-Video"/>
|
||||
<ComboBoxItem Content="PalmOS"/>
|
||||
<ComboBoxItem Content="Photo CD"/>
|
||||
<ComboBoxItem Content="PlayStation GameShark Updates"/>
|
||||
<ComboBoxItem Content="Tomy Kiss-Site"/>
|
||||
<ComboBoxItem Content="Video CD"/>
|
||||
</ComboBox>
|
||||
<TextBox x:Name="TXT_OutputFilename" Grid.Row="1" Grid.Column="1" Height="22"></TextBox>
|
||||
<TextBox x:Name="TXT_OutputDirectory" Grid.Row="2" Grid.Column="1" Height="22" Width="290" HorizontalAlignment="left" Text="ISO" ></TextBox>
|
||||
<Button x:Name="BTN_OutputDirectoryBrowse" Grid.Row="2" Grid.Column="1" Height="22" Width="50" HorizontalAlignment="Right" Content="Browse" Click="BTN_OutputDirectoryBrowse_Click" ></Button>
|
||||
<ComboBox x:Name="CB_DriveLetter" Grid.Row="3" Grid.Column="1" Height="22" Width="60" HorizontalAlignment="left">
|
||||
|
||||
</ComboBox>
|
||||
<ComboBox x:Name="CB_DriveSpeed" Grid.Row="4" Grid.Column="1" Height="22" Width="60" HorizontalAlignment="left" SelectionChanged="CB_DriveSpeed_SelectionChanged">
|
||||
<ComboBoxItem Content="4"/>
|
||||
<ComboBoxItem Content="8"/>
|
||||
<ComboBoxItem Content="16"/>
|
||||
<ComboBoxItem Content="48"/>
|
||||
<ComboBoxItem Content="Custom"/>
|
||||
</ComboBox>
|
||||
|
||||
|
||||
<Label Grid.Row="5" Grid.Column="0" VerticalAlignment="Center">Custom Parameters</Label>
|
||||
<TextBox x:Name="txt_CustomParameters" Grid.Row="5" Grid.Column="1" Height="22" Width="397" HorizontalAlignment="left" IsEnabled="False" />
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="0" Margin="15,20,15,10">
|
||||
<Grid Grid.Row="2" Grid.Column="0" Margin="15,19.6,15.2,9.8" Grid.ColumnSpan="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Button x:Name="BTN_Start" Grid.Row="0" Grid.Column="0" Height="22" Width="150" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Start Dumping" Click="BTN_Start_Click" IsEnabled="False" />
|
||||
<Button x:Name="BTN_Search" Grid.Row="0" Grid.Column="1" Height="22" Width="150" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Scan for disks" Click="BTN_Search_Click" />
|
||||
|
||||
<Button x:Name="btn_StartStop" Grid.Row="0" Grid.Column="0" Height="22" Width="150" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Start Dumping" Click="btn_StartStop_Click" IsEnabled="False" />
|
||||
<Button x:Name="btn_Search" Grid.Row="0" Grid.Column="1" Height="22" Width="150" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Scan for disks" Click="btn_Search_Click" />
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="2" Grid.Column="0" Margin="15,20,15,10">
|
||||
<Grid Grid.Row="3" Grid.Column="0" Margin="15,20.2,15.2,9.8" Grid.ColumnSpan="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Label x:Name="LBL_Status" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Waiting for CD or DVD..." />
|
||||
|
||||
<Label x:Name="lbl_Status" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Waiting for CD or DVD..." />
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
</Window>
|
||||
|
||||
@@ -1,372 +1,645 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.IO;
|
||||
using WinForms = System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using WinForms = System.Windows.Forms;
|
||||
|
||||
namespace DICUI
|
||||
{
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
public void ScanForDisk()
|
||||
// Private paths
|
||||
private string defaultOutputPath;
|
||||
private string dicPath;
|
||||
private string psxtPath;
|
||||
private string sgRawPath;
|
||||
|
||||
// Private UI-related variables
|
||||
private List<Tuple<char, string>> _drives { get; set; }
|
||||
private List<int> _driveSpeeds { get { return new List<int> { 1, 2, 3, 4, 6, 8, 12, 16, 20, 24, 32, 40, 44, 48, 52, 56, 72 }; } }
|
||||
private List<Tuple<string, KnownSystem?, DiscType?>> _systems { get; set; }
|
||||
private Process childProcess { get; set; }
|
||||
private Window childWindow { get; set; }
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
BTN_Search.IsEnabled = false;
|
||||
CB_DriveLetter.Items.Clear();
|
||||
foreach (var d in DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.CDRom))
|
||||
InitializeComponent();
|
||||
|
||||
// Get all settings
|
||||
GetSettings();
|
||||
|
||||
// Populate the list of systems
|
||||
PopulateSystems();
|
||||
|
||||
// Populate the list of drives
|
||||
PopulateDrives();
|
||||
|
||||
// Populate the list of drive speeds
|
||||
PopulateDriveSpeeds();
|
||||
SetSupportedDriveSpeed();
|
||||
}
|
||||
|
||||
#region Events
|
||||
|
||||
private void btn_StartStop_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if ((string)btn_StartStop.Content == UIElements.StartDumping)
|
||||
{
|
||||
if (d.IsReady == true)
|
||||
{
|
||||
TXT_OutputFilename.Text = d.VolumeLabel;
|
||||
|
||||
if (TXT_OutputFilename.Text == "")
|
||||
{
|
||||
TXT_OutputFilename.Text = "unknown";
|
||||
}
|
||||
CB_DriveLetter.Items.Add(d.Name.Replace(":\\", ""));
|
||||
CB_DriveLetter.SelectedIndex = 0;
|
||||
TXT_OutputDirectory.Text = "ISO" + "\\" + TXT_OutputFilename.Text + "\\";
|
||||
LBL_Status.Content = "CD or DVD found ! Choose your Disc Type";
|
||||
BTN_Start.IsEnabled = true;
|
||||
CB_DriveSpeed.Text = "8";
|
||||
}
|
||||
else
|
||||
{
|
||||
LBL_Status.Content = "No CD or DVD found !";
|
||||
}
|
||||
BTN_Search.IsEnabled = true;
|
||||
StartDumping();
|
||||
}
|
||||
else if ((string)btn_StartStop.Content == UIElements.StopDumping)
|
||||
{
|
||||
CancelDumping();
|
||||
}
|
||||
}
|
||||
|
||||
public void BrowseFolder()
|
||||
private void btn_OutputDirectoryBrowse_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
BrowseFolder();
|
||||
EnsureDiscInformation();
|
||||
}
|
||||
|
||||
private void btn_Search_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
PopulateDrives();
|
||||
SetSupportedDriveSpeed();
|
||||
EnsureDiscInformation();
|
||||
}
|
||||
|
||||
private void cmb_DiscType_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
GetOutputNames();
|
||||
EnsureDiscInformation();
|
||||
}
|
||||
|
||||
private void cmb_DriveLetter_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
SetSupportedDriveSpeed();
|
||||
GetOutputNames();
|
||||
EnsureDiscInformation();
|
||||
}
|
||||
|
||||
private void cmb_DriveSpeed_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
EnsureDiscInformation();
|
||||
}
|
||||
|
||||
private void tbr_Properties_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ShowSettings();
|
||||
}
|
||||
|
||||
private void tbr_Properties_CanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e)
|
||||
{
|
||||
e.CanExecute = true;
|
||||
}
|
||||
|
||||
private void btn_Settings_Accept_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
SaveSettings();
|
||||
childWindow.Close();
|
||||
GetSettings();
|
||||
}
|
||||
|
||||
private void btn_Settings_Cancel_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
childWindow.Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
/// <summary>
|
||||
/// Get a complete list of supported systems and fill the combo box
|
||||
/// </summary>
|
||||
private void PopulateSystems()
|
||||
{
|
||||
_systems = Utilities.CreateListOfSystems();
|
||||
cmb_DiscType.ItemsSource = _systems;
|
||||
cmb_DiscType.DisplayMemberPath = "Item1";
|
||||
cmb_DiscType.SelectedIndex = 0;
|
||||
cmb_DiscType_SelectionChanged(null, null);
|
||||
|
||||
btn_StartStop.IsEnabled = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a complete list of active disc drives and fill the combo box
|
||||
/// </summary>
|
||||
/// <remarks>TODO: Find a way for this to periodically run, or have it hook to a "drive change" event</remarks>
|
||||
private void PopulateDrives()
|
||||
{
|
||||
// Populate the list of drives and add it to the combo box
|
||||
_drives = Utilities.CreateListOfDrives();
|
||||
cmb_DriveLetter.ItemsSource = _drives;
|
||||
cmb_DriveLetter.DisplayMemberPath = "Item1";
|
||||
cmb_DriveLetter.SelectedIndex = 0;
|
||||
cmb_DriveLetter_SelectionChanged(null, null);
|
||||
|
||||
if (cmb_DriveLetter.Items.Count > 0)
|
||||
{
|
||||
lbl_Status.Content = "Valid optical disc found! Choose your Disc Type";
|
||||
btn_StartStop.IsEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lbl_Status.Content = "No valid optical disc found!";
|
||||
btn_StartStop.IsEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a complete list of (possible) disc drive speeds, and fill the combo box
|
||||
/// </summary>
|
||||
private void PopulateDriveSpeeds()
|
||||
{
|
||||
cmb_DriveSpeed.ItemsSource = _driveSpeeds;
|
||||
cmb_DriveSpeed.SelectedItem = 8;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Browse for an output folder
|
||||
/// </summary>
|
||||
private void BrowseFolder()
|
||||
{
|
||||
WinForms.FolderBrowserDialog folderDialog = new WinForms.FolderBrowserDialog { ShowNewFolderButton = false, SelectedPath = System.AppDomain.CurrentDomain.BaseDirectory };
|
||||
WinForms.DialogResult result = folderDialog.ShowDialog();
|
||||
|
||||
if (result == WinForms.DialogResult.OK)
|
||||
{
|
||||
String sPath = folderDialog.SelectedPath;
|
||||
TXT_OutputDirectory.Text = sPath;
|
||||
txt_OutputDirectory.Text = folderDialog.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
public async void StartDumping()
|
||||
/// <summary>
|
||||
/// Begin the dumping process using the given inputs
|
||||
/// </summary>
|
||||
private async void StartDumping()
|
||||
{
|
||||
String VAR_Type = "";
|
||||
String VAR_Switches = "";
|
||||
String VAR_DriveLetter = CB_DriveLetter.Text;
|
||||
String VAR_OutputDirectory = TXT_OutputDirectory.Text;
|
||||
String VAR_OutputFilename = TXT_OutputFilename.Text;
|
||||
String VAR_DriveSpeed = CB_DriveSpeed.Text;
|
||||
Boolean VAR_IsPSX = false;
|
||||
Boolean VAR_IsXBOXorPS4 = false;
|
||||
BTN_Start.IsEnabled = false;
|
||||
// Local variables
|
||||
string driveLetter = cmb_DriveLetter.Text;
|
||||
string outputDirectory = txt_OutputDirectory.Text;
|
||||
string outputFilename = txt_OutputFilename.Text;
|
||||
btn_StartStop.Content = UIElements.StopDumping;
|
||||
|
||||
switch (Convert.ToString(CB_DiscType.Text))
|
||||
// Get the currently selected item
|
||||
var selected = cmb_DiscType.SelectedValue as Tuple<string, KnownSystem?, DiscType?>;
|
||||
|
||||
// Validate that everything is good
|
||||
if (string.IsNullOrWhiteSpace(txt_CustomParameters.Text)
|
||||
|| !Utilities.ValidateParameters(txt_CustomParameters.Text))
|
||||
{
|
||||
#region Consoles
|
||||
|
||||
case "Bandai Playdia Quick Interactive System":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Bandai / Apple Pippin":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Commodore Amiga CD / CD32 / CDTV":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Mattel HyperScan":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Microsoft XBOX":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Microsoft XBOX 360":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Microsoft XBOX One":
|
||||
VAR_Type = "bd";
|
||||
VAR_Switches = "";
|
||||
VAR_IsXBOXorPS4 = true;
|
||||
break;
|
||||
case "NEC PC-Engine / TurboGrafx CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "NEC PC-FX / PC-FXGA":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Nintendo GameCube":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Nintendo Wii":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Nintendo Wii U":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Panasonic 3DO":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Philips CD-i":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sega CD / Mega CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sega Dreamcast":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Sega Saturn":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "SNK Neo Geo CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sony PlayStation":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
VAR_IsPSX = true;
|
||||
break;
|
||||
case "Sony PlayStation 2 (CD-Rom)":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sony PlayStation 2 (DVD-Rom)":
|
||||
VAR_Type = "dvd";
|
||||
VAR_Switches = "";
|
||||
break;
|
||||
case "Sony PlayStation 3":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Sony PlayStation 4":
|
||||
VAR_Type = "bd";
|
||||
VAR_Switches = "";
|
||||
VAR_IsXBOXorPS4 = true;
|
||||
break;
|
||||
case "Sony PlayStation Portable":
|
||||
// No-op - PSP can't be dumped with DIC
|
||||
break;
|
||||
case "VM Labs NUON":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "VTech V.Flash - V.Smile Pro":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "ZAPiT Games Game Wave Family Entertainment System":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Computers
|
||||
|
||||
case "Acorn Archimedes":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Apple Macintosh (CD-Rom)":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Apple Macintosh (DVD-Rom)":
|
||||
VAR_Type = "dvd";
|
||||
VAR_Switches = "";
|
||||
break;
|
||||
case "Fujitsu FM Towns series":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "IBM PC Compatible (CD-Rom)":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2 /ns /sf /ss";
|
||||
break;
|
||||
case "IBM PC Compatible (DVD-Rom)":
|
||||
VAR_Type = "dvd";
|
||||
VAR_Switches = "";
|
||||
break;
|
||||
case "NEC PC-88":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "NEC PC-98":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sharp X68000":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Arcade
|
||||
|
||||
case "Namco / Sega / Nintendo Triforce":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Sega Chihiro":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Sega Lindbergh":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Sega Naomi":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Sega Naomi 2":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "TAB-Austria Quizard":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
|
||||
case "Tandy / Memorex Visual Information System":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Others
|
||||
|
||||
case "Audio CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "BD-Video":
|
||||
VAR_Type = "bd";
|
||||
VAR_Switches = "";
|
||||
break;
|
||||
case "DVD-Video":
|
||||
VAR_Type = "dvd";
|
||||
break;
|
||||
case "PalmOS":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Philips CD-i Digital Video":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Photo CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "PlayStation GameShark Updates":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Tao iKTV":
|
||||
// Placeholder for later use
|
||||
break;
|
||||
case "Tomy Kiss-Site":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
case "Video CD":
|
||||
VAR_Type = "cd";
|
||||
VAR_Switches = "/c2";
|
||||
break;
|
||||
|
||||
#endregion
|
||||
|
||||
case "Unknown":
|
||||
default:
|
||||
VAR_Type = "";
|
||||
VAR_Switches = "";
|
||||
break;
|
||||
lbl_Status.Content = "Error! Current configuration is not supported!";
|
||||
btn_StartStop.Content = UIElements.StartDumping;
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate that the required program exits
|
||||
if (!File.Exists(dicPath))
|
||||
{
|
||||
lbl_Status.Content = "Error! Could not find DiscImageCreator!";
|
||||
btn_StartStop.Content = UIElements.StartDumping;
|
||||
return;
|
||||
}
|
||||
|
||||
// If a complete dump already exists
|
||||
if (Utilities.FoundAllFiles(outputDirectory, outputFilename, selected.Item3))
|
||||
{
|
||||
MessageBoxResult result = MessageBox.Show("A complete dump already exists! Are you sure you want to overwrite?", "Overwrite?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
|
||||
if (result == MessageBoxResult.No || result == MessageBoxResult.Cancel || result == MessageBoxResult.None)
|
||||
{
|
||||
lbl_Status.Content = "Dumping aborted!";
|
||||
btn_StartStop.Content = UIElements.StartDumping;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
lbl_Status.Content = "Beginning dumping process";
|
||||
string parameters = txt_CustomParameters.Text;
|
||||
|
||||
await Task.Run(
|
||||
() =>
|
||||
{
|
||||
Process process = new Process();
|
||||
process.StartInfo.FileName = "Release_ANSI\\DiscImageCreator.exe";
|
||||
process.StartInfo.Arguments = VAR_Type + " " + VAR_DriveLetter + " \"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + "\" " + VAR_DriveSpeed + " " + VAR_Switches;
|
||||
Console.WriteLine(process.StartInfo.Arguments);
|
||||
process.Start();
|
||||
process.WaitForExit();
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
FileName = dicPath,
|
||||
Arguments = parameters,
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
});
|
||||
|
||||
if (VAR_IsXBOXorPS4 == true)
|
||||
// Special cases
|
||||
switch (selected.Item2)
|
||||
{
|
||||
using (StreamWriter writetext = new StreamWriter("PS4orXBOXONE.bat"))
|
||||
case KnownSystem.MicrosoftXBOXOne:
|
||||
case KnownSystem.SonyPlayStation4:
|
||||
if (!File.Exists(sgRawPath))
|
||||
{
|
||||
lbl_Status.Content = "Error! Could not find sg-raw!";
|
||||
break;
|
||||
}
|
||||
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
FileName = sgRawPath,
|
||||
Arguments = "-v -r 4100 -R " + driveLetter + ": " + "ad 01 00 00 00 00 00 00 10 04 00 00 -o \"PIC.bin\""
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
break;
|
||||
case KnownSystem.SonyPlayStation:
|
||||
if (!File.Exists(psxtPath))
|
||||
{
|
||||
lbl_Status.Content = "Error! Could not find psxt001z!";
|
||||
break;
|
||||
}
|
||||
|
||||
// Invoke the program with all 3 configurations
|
||||
// TODO: Use these outputs for PSX information
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
FileName = psxtPath,
|
||||
Arguments = "\"" + Utilities.GetFirstTrack(outputDirectory, outputFilename) + "\" > " + "\"" + Path.Combine(outputDirectory, "psxt001z.txt"),
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
FileName = psxtPath,
|
||||
Arguments = "--libcrypt " + "\"" + Path.Combine(outputDirectory, outputFilename + ".sub") + "\" > " + "\"" + Path.Combine(outputDirectory, "libcrypt.txt"),
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
FileName = psxtPath,
|
||||
Arguments = "--libcryptdrvfast " + driveLetter + " > " + "\"" + Path.Combine(outputDirectory, "libcryptdrv.log"),
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
break;
|
||||
}
|
||||
|
||||
// Check to make sure that the output had all the correct files
|
||||
if (!Utilities.FoundAllFiles(outputDirectory, outputFilename, selected.Item3))
|
||||
{
|
||||
lbl_Status.Content = "Error! Please check output directory as dump may be incomplete!";
|
||||
btn_StartStop.Content = UIElements.StartDumping;
|
||||
return;
|
||||
}
|
||||
|
||||
lbl_Status.Content = "Dumping complete!";
|
||||
|
||||
Dictionary<string, string> templateValues = Utilities.ExtractOutputInformation(outputDirectory, outputFilename, selected.Item2, selected.Item3);
|
||||
List<string> formattedValues = Utilities.FormatOutputData(templateValues, selected.Item2, selected.Item3);
|
||||
bool success = Utilities.WriteOutputData(outputDirectory, outputFilename, formattedValues);
|
||||
|
||||
btn_StartStop.Content = UIElements.StartDumping;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cancel an in-progress dumping process
|
||||
/// </summary>
|
||||
private void CancelDumping()
|
||||
{
|
||||
try
|
||||
{
|
||||
childProcess.Kill();
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure information is consistent with the currently selected disc type
|
||||
/// </summary>
|
||||
private void EnsureDiscInformation()
|
||||
{
|
||||
// If we're on a separator, go to the next item
|
||||
var tuple = cmb_DiscType.SelectedItem as Tuple<string, KnownSystem?, DiscType?>;
|
||||
if (tuple.Item2 == null && tuple.Item3 == null)
|
||||
{
|
||||
cmb_DiscType.SelectedIndex++;
|
||||
tuple = cmb_DiscType.SelectedItem as Tuple<string, KnownSystem?, DiscType?>;
|
||||
}
|
||||
|
||||
// If we're on an unsupported type, update the status accordingly
|
||||
switch (tuple.Item3)
|
||||
{
|
||||
case DiscType.NONE:
|
||||
lbl_Status.Content = "Please select a valid disc type";
|
||||
btn_StartStop.IsEnabled = false;
|
||||
break;
|
||||
case DiscType.GameCubeGameDisc:
|
||||
case DiscType.GDROM:
|
||||
lbl_Status.Content = string.Format("{0} discs are partially supported by DIC", Utilities.DiscTypeToString(tuple.Item3));
|
||||
btn_StartStop.IsEnabled = true;
|
||||
break;
|
||||
case DiscType.HDDVD:
|
||||
case DiscType.UMD:
|
||||
lbl_Status.Content = string.Format("{0} discs are not currently supported by DIC", Utilities.DiscTypeToString(tuple.Item3));
|
||||
btn_StartStop.IsEnabled = true;
|
||||
break;
|
||||
default:
|
||||
lbl_Status.Content = string.Format("{0} ready to dump", Utilities.DiscTypeToString(tuple.Item3));
|
||||
btn_StartStop.IsEnabled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// If we're in a type that doesn't support drive speeds
|
||||
switch (tuple.Item3)
|
||||
{
|
||||
case DiscType.BD25:
|
||||
case DiscType.BD50:
|
||||
cmb_DriveSpeed.IsEnabled = false;
|
||||
break;
|
||||
default:
|
||||
cmb_DriveSpeed.IsEnabled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// Special case for Custom input
|
||||
if (tuple.Item1 == "Custom Input" && tuple.Item2 == KnownSystem.NONE && tuple.Item3 == DiscType.NONE)
|
||||
{
|
||||
txt_CustomParameters.IsEnabled = true;
|
||||
txt_OutputFilename.IsEnabled = false;
|
||||
txt_OutputDirectory.IsEnabled = false;
|
||||
btn_OutputDirectoryBrowse.IsEnabled = false;
|
||||
cmb_DriveLetter.IsEnabled = false;
|
||||
cmb_DriveSpeed.IsEnabled = false;
|
||||
btn_StartStop.IsEnabled = true;
|
||||
lbl_Status.Content = "User input mode";
|
||||
}
|
||||
else
|
||||
{
|
||||
txt_CustomParameters.IsEnabled = false;
|
||||
txt_OutputFilename.IsEnabled = true;
|
||||
txt_OutputDirectory.IsEnabled = true;
|
||||
btn_OutputDirectoryBrowse.IsEnabled = true;
|
||||
cmb_DriveLetter.IsEnabled = true;
|
||||
cmb_DriveSpeed.IsEnabled = true;
|
||||
|
||||
// Populate with the correct params for inputs (if we're not on the default option)
|
||||
if (cmb_DiscType.SelectedIndex > 0)
|
||||
{
|
||||
writetext.WriteLine("sg_raw.exe -v -r 4100 -R " + VAR_DriveLetter + ":" + "ad 01 00 00 00 00 00 00 10 04 00 00 -o \"PIC.bin\"");
|
||||
var selected = cmb_DiscType.SelectedValue as Tuple<string, KnownSystem?, DiscType?>;
|
||||
string discType = Utilities.GetBaseCommand(selected.Item3);
|
||||
List<string> defaultParams = Utilities.GetDefaultParameters(selected.Item2, selected.Item3);
|
||||
txt_CustomParameters.Text = discType
|
||||
+ " " + cmb_DriveLetter.Text
|
||||
+ " \"" + Path.Combine(txt_OutputDirectory.Text, txt_OutputFilename.Text) + "\" "
|
||||
+ (selected.Item3 != DiscType.BD25 && selected.Item3 != DiscType.BD50 ? (int)cmb_DriveSpeed.SelectedItem + " " : "")
|
||||
+ string.Join(" ", defaultParams);
|
||||
}
|
||||
Process processps4orxboxone = new Process();
|
||||
processps4orxboxone.StartInfo.FileName = "PS4orXBOXONE.bat";
|
||||
processps4orxboxone.Start();
|
||||
processps4orxboxone.WaitForExit();
|
||||
}
|
||||
if (VAR_IsPSX == true)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the default output directory name from the currently selected drive
|
||||
/// </summary>
|
||||
private void GetOutputNames()
|
||||
{
|
||||
var driveTuple = cmb_DriveLetter.SelectedItem as Tuple<char, string>;
|
||||
var discTuple = cmb_DiscType.SelectedItem as Tuple<string, KnownSystem?, DiscType?>;
|
||||
|
||||
if (driveTuple != null && discTuple != null)
|
||||
{
|
||||
using (StreamWriter writetext = new StreamWriter("PSX.bat"))
|
||||
txt_OutputDirectory.Text = Path.Combine(defaultOutputPath, driveTuple.Item2);
|
||||
txt_OutputFilename.Text = driveTuple.Item2 + Utilities.GetDefaultExtension(discTuple.Item3);
|
||||
}
|
||||
else
|
||||
{
|
||||
txt_OutputDirectory.Text = defaultOutputPath;
|
||||
txt_OutputFilename.Text = "disc.bin";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the highest supported drive speed as reported by DiscImageCreator
|
||||
/// </summary>
|
||||
private void SetSupportedDriveSpeed()
|
||||
{
|
||||
// Get the drive letter from the selected item
|
||||
var selected = cmb_DriveLetter.SelectedItem as Tuple<char, string>;
|
||||
if (selected == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate that the required program exits
|
||||
if (!File.Exists(dicPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
char driveLetter = selected.Item1;
|
||||
childProcess = new Process()
|
||||
{
|
||||
StartInfo = new ProcessStartInfo()
|
||||
{
|
||||
writetext.WriteLine("edccchk" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + ".bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "edccchk1.txt");
|
||||
writetext.WriteLine("edccchk" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + " (Track 1).bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "edccchk1.txt");
|
||||
writetext.WriteLine("edccchk" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + " (Track 01).bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "edccchk1.txt");
|
||||
writetext.WriteLine("psxt001z" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + ".bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "psxt001z1.txt");
|
||||
writetext.WriteLine("psxt001z" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + " (Track 1).bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "psxt001z2.txt");
|
||||
writetext.WriteLine("psxt001z" + " " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + " (Track 01).bin" + "\" > " + "\"" + VAR_OutputDirectory + "\\" + "psxt001z3.txt");
|
||||
writetext.WriteLine("psxt001z" + " " + "--libcrypt " + "\"" + VAR_OutputDirectory + "\\" + VAR_OutputFilename + ".sub\" > " + "\"" + VAR_OutputDirectory + "\\" + "libcrypt.txt");
|
||||
writetext.WriteLine("psxt001z" + " " + "--libcryptdrvfast " + VAR_DriveLetter + " > " + "\"" + VAR_OutputDirectory + "\\" + "libcryptdrv.log");
|
||||
}
|
||||
Process processpsx = new Process();
|
||||
processpsx.StartInfo.FileName = "PSX.bat";
|
||||
processpsx.Start();
|
||||
processpsx.WaitForExit();
|
||||
}
|
||||
BTN_Start.IsEnabled = true;
|
||||
FileName = dicPath,
|
||||
Arguments = DICCommands.DriveSpeedCommand + " " + driveLetter,
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
},
|
||||
};
|
||||
childProcess.Start();
|
||||
childProcess.WaitForExit();
|
||||
string output = childProcess.StandardOutput.ReadToEnd();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
ScanForDisk();
|
||||
}
|
||||
|
||||
private void BTN_Start_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
StartDumping();
|
||||
}
|
||||
|
||||
private void BTN_OutputDirectoryBrowse_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
BrowseFolder();
|
||||
}
|
||||
|
||||
private void BTN_Search_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ScanForDisk();
|
||||
}
|
||||
|
||||
private void CB_DiscType_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
|
||||
{
|
||||
LBL_Status.Content = "Ready to dump";
|
||||
}
|
||||
|
||||
private void CB_DriveSpeed_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
|
||||
{
|
||||
if (CB_DriveSpeed.SelectedIndex == 4)
|
||||
int index = output.IndexOf("ReadSpeedMaximum:");
|
||||
string readspeed = Regex.Match(output.Substring(index), @"ReadSpeedMaximum: [0-9]+KB/sec \(([0-9]*)x\)").Groups[1].Value;
|
||||
if (!Int32.TryParse(readspeed, out int speed))
|
||||
{
|
||||
CB_DriveSpeed.Items.Clear();
|
||||
CB_DriveSpeed.IsEditable = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
cmb_DriveSpeed.SelectedValue = speed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show all user-configurable settings in a new window
|
||||
/// </summary>
|
||||
private void ShowSettings()
|
||||
{
|
||||
// Create the child window for settings
|
||||
childWindow = new Window()
|
||||
{
|
||||
ShowInTaskbar = false,
|
||||
Owner = Application.Current.MainWindow,
|
||||
Width = 500,
|
||||
Height = 250,
|
||||
ResizeMode = ResizeMode.NoResize,
|
||||
};
|
||||
|
||||
// Create the new Grid-based window
|
||||
var grid = new Grid
|
||||
{
|
||||
Margin = new Thickness(5),
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||
VerticalAlignment = VerticalAlignment.Stretch,
|
||||
};
|
||||
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = (GridLength)(new GridLengthConverter().ConvertFromString(String.Format("{0:n1}*", 1.2))) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = (GridLength)(new GridLengthConverter().ConvertFromString(String.Format("{0:n1}*", 2.5))) });
|
||||
grid.RowDefinitions.Add(new RowDefinition());
|
||||
grid.RowDefinitions.Add(new RowDefinition());
|
||||
grid.RowDefinitions.Add(new RowDefinition());
|
||||
grid.RowDefinitions.Add(new RowDefinition());
|
||||
grid.RowDefinitions.Add(new RowDefinition());
|
||||
|
||||
// Create all of the individual items in the panel
|
||||
Label dicPathLabel = new Label();
|
||||
dicPathLabel.Content = "DiscImageCreator Path:";
|
||||
dicPathLabel.FontWeight = (FontWeight)(new FontWeightConverter().ConvertFromString("Bold"));
|
||||
dicPathLabel.VerticalAlignment = VerticalAlignment.Center;
|
||||
dicPathLabel.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
Grid.SetRow(dicPathLabel, 0);
|
||||
Grid.SetColumn(dicPathLabel, 0);
|
||||
|
||||
TextBox dicPathSetting = new TextBox();
|
||||
dicPathSetting.Text = ConfigurationManager.AppSettings["dicPath"];
|
||||
dicPathSetting.VerticalAlignment = VerticalAlignment.Center;
|
||||
dicPathSetting.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
Grid.SetRow(dicPathSetting, 0);
|
||||
Grid.SetColumn(dicPathSetting, 1);
|
||||
|
||||
Label psxt001zPathLabel = new Label();
|
||||
psxt001zPathLabel.Content = "psxt001z Path:";
|
||||
psxt001zPathLabel.FontWeight = (FontWeight)(new FontWeightConverter().ConvertFromString("Bold"));
|
||||
psxt001zPathLabel.VerticalAlignment = VerticalAlignment.Center;
|
||||
psxt001zPathLabel.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
Grid.SetRow(psxt001zPathLabel, 1);
|
||||
Grid.SetColumn(psxt001zPathLabel, 0);
|
||||
|
||||
TextBox psxt001zPathSetting = new TextBox();
|
||||
psxt001zPathSetting.Text = ConfigurationManager.AppSettings["psxt001zPath"];
|
||||
psxt001zPathSetting.VerticalAlignment = VerticalAlignment.Center;
|
||||
psxt001zPathSetting.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
Grid.SetRow(psxt001zPathSetting, 1);
|
||||
Grid.SetColumn(psxt001zPathSetting, 1);
|
||||
|
||||
Label sgRawPathLabel = new Label();
|
||||
sgRawPathLabel.Content = "sg-raw Path:";
|
||||
sgRawPathLabel.FontWeight = (FontWeight)(new FontWeightConverter().ConvertFromString("Bold"));
|
||||
sgRawPathLabel.VerticalAlignment = VerticalAlignment.Center;
|
||||
sgRawPathLabel.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
Grid.SetRow(sgRawPathLabel, 2);
|
||||
Grid.SetColumn(sgRawPathLabel, 0);
|
||||
|
||||
TextBox sgRawPathSetting = new TextBox();
|
||||
sgRawPathSetting.Text = ConfigurationManager.AppSettings["sgRawPath"];
|
||||
sgRawPathSetting.VerticalAlignment = VerticalAlignment.Center;
|
||||
sgRawPathSetting.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
Grid.SetRow(sgRawPathSetting, 2);
|
||||
Grid.SetColumn(sgRawPathSetting, 1);
|
||||
|
||||
Label defaultOutputPathLabel = new Label();
|
||||
defaultOutputPathLabel.Content = "Default Output Path:";
|
||||
defaultOutputPathLabel.FontWeight = (FontWeight)(new FontWeightConverter().ConvertFromString("Bold"));
|
||||
defaultOutputPathLabel.VerticalAlignment = VerticalAlignment.Center;
|
||||
defaultOutputPathLabel.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
Grid.SetRow(defaultOutputPathLabel, 3);
|
||||
Grid.SetColumn(defaultOutputPathLabel, 0);
|
||||
|
||||
TextBox defaultOutputPathSetting = new TextBox();
|
||||
defaultOutputPathSetting.Text = ConfigurationManager.AppSettings["defaultOutputPath"];
|
||||
defaultOutputPathSetting.VerticalAlignment = VerticalAlignment.Center;
|
||||
defaultOutputPathSetting.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
Grid.SetRow(defaultOutputPathSetting, 3);
|
||||
Grid.SetColumn(defaultOutputPathSetting, 1);
|
||||
|
||||
Button acceptButton = new Button();
|
||||
acceptButton.Name = "btn_Settings_Accept";
|
||||
acceptButton.Content = "Accept";
|
||||
acceptButton.Click += btn_Settings_Accept_Click;
|
||||
Grid.SetRow(acceptButton, 4);
|
||||
Grid.SetColumn(acceptButton, 0);
|
||||
|
||||
Button cancelButton = new Button();
|
||||
cancelButton.Name = "btn_Settings_Cancel";
|
||||
cancelButton.Content = "Cancel";
|
||||
cancelButton.Click += btn_Settings_Cancel_Click;
|
||||
Grid.SetRow(cancelButton, 4);
|
||||
Grid.SetColumn(cancelButton, 1);
|
||||
|
||||
// Add all of the UI elements
|
||||
grid.Children.Add(dicPathLabel);
|
||||
grid.Children.Add(dicPathSetting);
|
||||
grid.Children.Add(psxt001zPathLabel);
|
||||
grid.Children.Add(psxt001zPathSetting);
|
||||
grid.Children.Add(sgRawPathLabel);
|
||||
grid.Children.Add(sgRawPathSetting);
|
||||
grid.Children.Add(defaultOutputPathLabel);
|
||||
grid.Children.Add(defaultOutputPathSetting);
|
||||
grid.Children.Add(acceptButton);
|
||||
grid.Children.Add(cancelButton);
|
||||
|
||||
// Now show the child window
|
||||
childWindow.Content = grid;
|
||||
childWindow.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save settings from the child window, if possible
|
||||
/// </summary>
|
||||
private void SaveSettings()
|
||||
{
|
||||
// If the child window is disposed, we don't think about it
|
||||
if (childWindow == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Clear the old settings and set new ones
|
||||
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
|
||||
configFile.AppSettings.Settings.Remove("dicPath");
|
||||
configFile.AppSettings.Settings.Add("dicPath", ((TextBox)(((Grid)childWindow.Content).Children[1])).Text);
|
||||
configFile.AppSettings.Settings.Remove("psxt001zPath");
|
||||
configFile.AppSettings.Settings.Add("psxt001zPath", ((TextBox)(((Grid)childWindow.Content).Children[3])).Text);
|
||||
configFile.AppSettings.Settings.Remove("sgRawPath");
|
||||
configFile.AppSettings.Settings.Add("sgRawPath", ((TextBox)(((Grid)childWindow.Content).Children[5])).Text);
|
||||
configFile.AppSettings.Settings.Remove("defaultOutputPath");
|
||||
configFile.AppSettings.Settings.Add("defaultOutputPath", ((TextBox)(((Grid)childWindow.Content).Children[7])).Text);
|
||||
configFile.Save(ConfigurationSaveMode.Modified);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get settings from the configuration, if possible
|
||||
/// </summary>
|
||||
private void GetSettings()
|
||||
{
|
||||
dicPath = ConfigurationManager.AppSettings["dicPath"] ?? "Programs\\DiscImageCreator.exe";
|
||||
psxtPath = ConfigurationManager.AppSettings["psxt001zPath"] ?? "psxt001z.exe";
|
||||
sgRawPath = ConfigurationManager.AppSettings["sgRawPath"] ?? "sg_raw.exe";
|
||||
defaultOutputPath = ConfigurationManager.AppSettings["defaultOutputPath"] ?? "ISO";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
63
Properties/Resources.Designer.cs
generated
63
Properties/Resources.Designer.cs
generated
@@ -1,63 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace DICUI.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DICUI.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
26
Properties/Settings.Designer.cs
generated
26
Properties/Settings.Designer.cs
generated
@@ -1,26 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace DICUI.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.6.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
76
README.md
76
README.md
@@ -1,23 +1,87 @@
|
||||
# DICUI
|
||||
This is my current progress on my C# Disc Image Creator UI.
|
||||
|
||||
I am using Disc Image Creator, created by Sarami, and would like to thanks him for this great software.
|
||||
|
||||
You can get the latest code and released on his github right here:
|
||||
https://github.com/saramibreak/DiscImageCreator
|
||||
|
||||
I'm a hobbyist programmer, so this code might not be optimal, feel free to make your recommendation / Pull request.
|
||||
|
||||
I would like this project to be a community project, so if you have some time and knowledge to give, I'll be glad to add you to the contributor of this project :)
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
Currently working on the project:
|
||||
|
||||
ReignStumble - Lead Developer
|
||||
ReignStumble - Co-Lead Programmer
|
||||
|
||||
darksabre76 - Contributer
|
||||
darksabre76 - Co-Lead Programmer
|
||||
|
||||
NHellFire - Contributer
|
||||
|
||||
Dizzzy - Concept/Ideas/Beta tester
|
||||
|
||||
|
||||
|
||||
2018-05-14
|
||||
--------------------------------------------------------------------------
|
||||
2018-06-13
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Version 1.01c released:
|
||||
Version 1.04b released:
|
||||
|
||||
- Added subIntention reading
|
||||
- Fixed extra extensions being appended
|
||||
- Fixed internationalization error (number formatting)
|
||||
- Fixed "Custom Input" not working
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
2018-06-13
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Version 1.04a released:
|
||||
|
||||
- Fixed issue with empty trays
|
||||
- Added settings dialog
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
2018-06-13
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Version 1.04 released:
|
||||
|
||||
- Behind-the-scenes fixes and formatting
|
||||
- Better checks for external programs
|
||||
- Automatically changing disc information
|
||||
- Custom parameters (and parameter validation)
|
||||
- Automatic drive speed selection
|
||||
- Automatic submission information creation
|
||||
- Add ability to stop a dump from the UI
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
2018-06-08
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Version 1.03 released:
|
||||
|
||||
- edccchk now run on all CD-Roms
|
||||
- Discs unsupported by Windows are now regonized
|
||||
- Extra \ when accepting default save has been removed.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
2018-05-18
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Version 1.02b released:
|
||||
|
||||
- Fixed XBOX One and PS4 Drive Speed issue. (1.02)
|
||||
- Started implementing DiscImageCreator Path selection. (1.02)
|
||||
- Conforming my naming for objects and variable. (1.02)
|
||||
- Added missing DLL (1.02b)
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
2018-05-14
|
||||
--------------------------------------------------------------------------
|
||||
Version 1.01d released:
|
||||
|
||||
|
||||
Download the latest release here:
|
||||
https://github.com/reignstumble/DICUI/releases
|
||||
|
||||
1910
Utilities.cs
Normal file
1910
Utilities.cs
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user