initial commit

This commit is contained in:
what 2021-07-26 13:04:16 -07:00
commit 1b60743303
274 changed files with 25866 additions and 0 deletions

141
.editorconfig Normal file
View File

@ -0,0 +1,141 @@
root = true
; EditorConfig to support per-solution formatting. Use the EditorConfig VS add-in to make this work. http://editorconfig.org/
[*.cs]
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning
dotnet_style_predefined_type_for_locals_parameters_members = true:warning
dotnet_style_predefined_type_for_member_access = true:warning
dotnet_style_object_initializer = true:error
dotnet_style_collection_initializer = true:error
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_coalesce_expression = true:error
dotnet_style_null_propagation = true:error
csharp_style_var_for_built_in_types = true:warning
csharp_style_var_when_type_is_apparent = true:warning
csharp_style_var_elsewhere = true:warning
csharp_style_expression_bodied_methods = true:warning
csharp_style_expression_bodied_constructors = true:warning
csharp_style_expression_bodied_operators = true:error
csharp_style_expression_bodied_properties = true:warning
csharp_style_expression_bodied_indexers = true:error
csharp_style_expression_bodied_accessors = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_throw_expression = false:suggestion
csharp_style_conditional_delegate_call = true:error
csharp_indent_switch_labels = false
csharp_indent_labels = one_less_than_current
csharp_prefer_simple_using_statement = true:warning
deltaengine_max_method_lines = 15
deltaengine_max_parameters = 4
deltaengine_max_fields = 12
deltaengine_max_methods = 30
deltaengine_max_public_methods = 10
deltaengine_max_class_lines = 400
deltaengine_max_nesting_depth = 4
# Microsoft .NET properties
csharp_preferred_modifier_order = public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:warning
csharp_space_after_cast = false
dotnet_naming_rule.constants_rule.import_to_resharper = as_predefined
dotnet_naming_rule.constants_rule.severity = warning
dotnet_naming_rule.constants_rule.style = upper_camel_case_style
dotnet_naming_rule.constants_rule.symbols = constants_symbols
dotnet_naming_rule.interfaces_rule.import_to_resharper = as_predefined
dotnet_naming_rule.interfaces_rule.severity = warning
dotnet_naming_rule.interfaces_rule.style = upper_camel_case_style
dotnet_naming_rule.interfaces_rule.symbols = interfaces_symbols
dotnet_naming_rule.local_constants_rule.import_to_resharper = as_predefined
dotnet_naming_rule.local_constants_rule.severity = warning
dotnet_naming_rule.local_constants_rule.style = upper_camel_case_style
dotnet_naming_rule.local_constants_rule.symbols = local_constants_symbols
dotnet_naming_rule.private_constants_rule.import_to_resharper = as_predefined
dotnet_naming_rule.private_constants_rule.severity = warning
dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style
dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols
dotnet_naming_rule.private_instance_fields_rule.import_to_resharper = as_predefined
dotnet_naming_rule.private_instance_fields_rule.severity = warning
dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style
dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols
dotnet_naming_rule.private_static_fields_rule.import_to_resharper = as_predefined
dotnet_naming_rule.private_static_fields_rule.severity = warning
dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style
dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols
dotnet_naming_rule.private_static_readonly_rule.import_to_resharper = as_predefined
dotnet_naming_rule.private_static_readonly_rule.severity = warning
dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style
dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols
dotnet_naming_rule.public_fields_rule.import_to_resharper = as_predefined
dotnet_naming_rule.public_fields_rule.severity = none
dotnet_naming_rule.public_fields_rule.style = lower_camel_case_style
dotnet_naming_rule.public_fields_rule.symbols = public_fields_symbols
dotnet_naming_rule.static_readonly_rule.import_to_resharper = as_predefined
dotnet_naming_rule.static_readonly_rule.severity = warning
dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style
dotnet_naming_rule.static_readonly_rule.symbols = static_readonly_symbols
dotnet_naming_rule.type_parameters_rule.import_to_resharper = as_predefined
dotnet_naming_rule.type_parameters_rule.severity = warning
dotnet_naming_rule.type_parameters_rule.style = upper_camel_case_style
dotnet_naming_rule.type_parameters_rule.symbols = type_parameters_symbols
dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
dotnet_naming_rule.unity_serialized_field_rule.severity = warning
dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style
dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
dotnet_naming_style.lower_camel_case_style.capitalization = camel_case
dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case
dotnet_naming_symbols.constants_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.constants_symbols.applicable_kinds = field
dotnet_naming_symbols.constants_symbols.required_modifiers = const
dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities = *
dotnet_naming_symbols.interfaces_symbols.applicable_kinds = interface
dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities = *
dotnet_naming_symbols.local_constants_symbols.applicable_kinds = local
dotnet_naming_symbols.local_constants_symbols.required_modifiers = const
dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static
dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field
dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static,readonly
dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.public_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.static_readonly_symbols.applicable_kinds = field
dotnet_naming_symbols.static_readonly_symbols.required_modifiers = static,readonly
dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities = *
dotnet_naming_symbols.type_parameters_symbols.applicable_kinds = type_parameter
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds = unity_serialised_field
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none
dotnet_style_parentheses_in_other_binary_operators = never_if_unnecessary:none
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
[*]
end_of_line = crlf
indent_style = spc
indent_size = 2
max_line_length = 100
trim_trailing_whitespace = true
charset = utf8
[*.{proto,shader}]
indent_style = spc
indent_size = 2
[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,config,cs,cshtml,csproj,css,dbml,discomap,dtd,htm,html,jsproj,lsproj,master,njsproj,nuspec,paml,proj,props,razor,resw,resx,skin,StyleCop,targets,tasks,vb,vbproj,xaml,xamlx,xml,xoml,xsd}]
indent_style = spc
indent_size = 2

387
.gitignore vendored Normal file
View File

@ -0,0 +1,387 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Nuget personal access tokens and Credentials
nuget.config
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
.idea/
*.sln.iml

22
Explorer/AppStatus.cs Normal file
View File

@ -0,0 +1,22 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.AppStatus
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer
{
public class AppStatus
{
public static void NotifyNewAppStatus(string message)
{
if (AppStatus.OnAppStatusUpdate == null)
return;
AppStatus.OnAppStatusUpdate(message);
}
public static event AppStatus.AppStatusUpdateEventHandler OnAppStatusUpdate;
public delegate void AppStatusUpdateEventHandler(string message);
}
}

View File

@ -0,0 +1,18 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.AssemblyGitBuildBranch
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
namespace GDRomExplorer
{
[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyGitBuildBranch : Attribute
{
public string GitBuildBranch { get; private set; }
public AssemblyGitBuildBranch(string txt) => this.GitBuildBranch = txt;
}
}

View File

@ -0,0 +1,18 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.AssemblyGitBuildSHA1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
namespace GDRomExplorer
{
[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyGitBuildSHA1 : Attribute
{
public string GitBuildSHA1 { get; private set; }
public AssemblyGitBuildSHA1(string txt) => this.GitBuildSHA1 = txt;
}
}

18
Explorer/AssemblyInfo.cs Normal file
View File

@ -0,0 +1,18 @@
using GDRomExplorer;
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyGitBuildSHA1("fd2eb45")]
[assembly: AssemblyGitBuildBranch("release_1.6.3")]
[assembly: AssemblyFileVersion("1.6.3")]
[assembly: AssemblyTitle("GD-ROM Explorer")]
[assembly: AssemblyDescription("GD-ROM Explorer for Dreamcast and Naomi disc images")]
[assembly: ComVisible(true)]
[assembly: AssemblyCompany("Japanese Cake")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyConfiguration("")]
[assembly: Guid("028a0854-6263-4b97-8b78-7512902f19d5")]
[assembly: AssemblyProduct("GD-ROM Explorer")]
[assembly: AssemblyCopyright("2010 - 2016")]
[assembly: AssemblyVersion("1.6.3.0")]
//[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config",Watch = true)]

View File

@ -0,0 +1,40 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.ContextMenuManager
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class ContextMenuManager
{
private MenuItemFactory Context;
private ContextMenuStrip LastDisplayedContextMenu;
public ContextMenuManager(MenuItemFactory Context) => this.Context = Context;
public ContextMenuStrip CreateContextMenu(ToolStripItem[] MenuItems)
{
ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.AddRange(MenuItems);
return contextMenuStrip;
}
public ContextMenuStrip CreateAndShowContextMenu(ToolStripItem[] MenuItems)
{
this.CloseContextMenuIfAny();
this.LastDisplayedContextMenu = this.CreateContextMenu(MenuItems);
this.LastDisplayedContextMenu.Show(Cursor.Position);
return this.LastDisplayedContextMenu;
}
public void CloseContextMenuIfAny()
{
if (this.LastDisplayedContextMenu == null)
return;
this.LastDisplayedContextMenu.Close();
}
}
}

View File

@ -0,0 +1,29 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.DiscListViewSelectionHandlerFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.UserControls;
using ImageReader.ISO9660.DirectoryRecords;
using System.Collections.Generic;
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class DiscListViewSelectionHandlerFactory : DiscSelectionHandlerFactory<ListView>
{
public DiscListViewSelectionHandlerFactory(DiscViewExplorer Context, ListView Control)
: base(Context, Control)
{
}
private DiscViewSelection<IList<DirectoryRecord>> newSelectionHandlers(
IList<DirectoryRecord> DirectoryRecords)
{
return DiscViewSelection<IList<DirectoryRecord>>.NewHandlersForListView(new DiscViewSelection<IList<DirectoryRecord>>.SelectionHandler<IList<DirectoryRecord>>(this.Context.DirectoryRecords_MouseRightClickHandler), new DiscViewSelection<IList<DirectoryRecord>>.SelectionHandler<IList<DirectoryRecord>>(this.Context.DirectoryRecords_MouseLeftClickHandler), new DiscViewSelection<IList<DirectoryRecord>>.SelectionHandler<IList<DirectoryRecord>>(this.Context.DirectoryRecords_MouseDoubleLeftClicksHandler), DirectoryRecords);
}
public override IDiscViewSelection newSelectionHandlers(object Handle) => Handle is IList<DirectoryRecord> ? (IDiscViewSelection) this.newSelectionHandlers(Handle as IList<DirectoryRecord>) : (IDiscViewSelection) null;
}
}

View File

@ -0,0 +1,13 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.DiscSelectionHandlerFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer.DiscView
{
public interface DiscSelectionHandlerFactory
{
IDiscViewSelection newSelectionHandlers(object Handle);
}
}

View File

@ -0,0 +1,24 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.DiscSelectionHandlerFactory`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.UserControls;
namespace GDRomExplorer.DiscView
{
public abstract class DiscSelectionHandlerFactory<T> : DiscSelectionHandlerFactory
{
protected DiscViewExplorer Context;
private T Control;
public DiscSelectionHandlerFactory(DiscViewExplorer Context, T Control)
{
this.Context = Context;
this.Control = Control;
}
public abstract IDiscViewSelection newSelectionHandlers(object Handle);
}
}

View File

@ -0,0 +1,71 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.DiscTreeViewSelectionHandlerFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.UserControls;
using ImageReader.ISO9660.DirectoryRecords;
using SEGATools.DiscFileSystem;
using SEGATools.Security;
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class DiscTreeViewSelectionHandlerFactory : DiscSelectionHandlerFactory<TreeView>
{
public DiscTreeViewSelectionHandlerFactory(DiscViewExplorer Context, TreeView Control)
: base(Context, Control)
{
}
private DiscViewSelection<IDiscFileSystem> newSelectionHandlers(
IDiscFileSystem discFileSystem)
{
return DiscViewSelection<IDiscFileSystem>.NewHandlersForTreeView(new DiscViewSelection<IDiscFileSystem>.SelectionHandler<IDiscFileSystem>(this.Context.Disc_AfterSelectHandler), new DiscViewSelection<IDiscFileSystem>.SelectionHandler<IDiscFileSystem>(this.Context.Disc_MouseRightClickHandler), (DiscViewSelection<IDiscFileSystem>.SelectionHandler<IDiscFileSystem>) null, discFileSystem);
}
private DiscViewSelection<DirectoryRecord> newSelectionHandlers(
DirectoryRecord DirectoryRecord)
{
return DiscViewSelection<DirectoryRecord>.NewHandlersForTreeView(new DiscViewSelection<DirectoryRecord>.SelectionHandler<DirectoryRecord>(this.Context.DirectoryRecord_AfterSelectClickHandler), new DiscViewSelection<DirectoryRecord>.SelectionHandler<DirectoryRecord>(this.Context.DirectoryRecord_MouseRightClickHandler), (DiscViewSelection<DirectoryRecord>.SelectionHandler<DirectoryRecord>) null, DirectoryRecord);
}
private DiscViewSelection<InitialProgramExtended> newSelectionHandlers(
InitialProgramExtended InitialProgram)
{
return DiscViewSelection<InitialProgramExtended>.NewHandlersForTreeView(new DiscViewSelection<InitialProgramExtended>.SelectionHandler<InitialProgramExtended>(this.Context.InitialProgram_AfterSelectHandler), new DiscViewSelection<InitialProgramExtended>.SelectionHandler<InitialProgramExtended>(this.Context.InitialProgram_MouseRightClickHandler), new DiscViewSelection<InitialProgramExtended>.SelectionHandler<InitialProgramExtended>(this.Context.InitialProgram_MouseDoubleLeftClicksHandler), InitialProgram);
}
private DiscViewSelection<IDiscSession> newSelectionHandlers(
IDiscSession DiscSession)
{
return DiscViewSelection<IDiscSession>.NewHandlersForTreeView(new DiscViewSelection<IDiscSession>.SelectionHandler<IDiscSession>(this.Context.DiscSession_AfterSelectHandler), new DiscViewSelection<IDiscSession>.SelectionHandler<IDiscSession>(this.Context.DiscSession_MouseRightClickHandler), (DiscViewSelection<IDiscSession>.SelectionHandler<IDiscSession>) null, DiscSession);
}
private DiscViewSelection<IDiscTrack> newSelectionHandlers(
IDiscTrack DiscTrack)
{
return DiscViewSelection<IDiscTrack>.NewHandlersForTreeView(new DiscViewSelection<IDiscTrack>.SelectionHandler<IDiscTrack>(this.Context.DiscTrack_AfterSelectHandler), new DiscViewSelection<IDiscTrack>.SelectionHandler<IDiscTrack>(this.Context.DiscTrack_MouseRightClickHandler), (DiscViewSelection<IDiscTrack>.SelectionHandler<IDiscTrack>) null, DiscTrack);
}
public override IDiscViewSelection newSelectionHandlers(object Handle)
{
switch (Handle)
{
case IDiscFileSystem _:
return (IDiscViewSelection) this.newSelectionHandlers(Handle as IDiscFileSystem);
case IDiscSession _:
return (IDiscViewSelection) this.newSelectionHandlers(Handle as IDiscSession);
case IDiscTrack _:
return (IDiscViewSelection) this.newSelectionHandlers(Handle as IDiscTrack);
case InitialProgramExtended _:
return (IDiscViewSelection) this.newSelectionHandlers(Handle as InitialProgramExtended);
case DirectoryRecord _:
return (IDiscViewSelection) this.newSelectionHandlers(Handle as DirectoryRecord);
default:
return (IDiscViewSelection) null;
}
}
}
}

View File

@ -0,0 +1,107 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.DiscViewSelection`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class DiscViewSelection<Selection> : IDiscViewSelection
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private DiscViewSelection<Selection>.SelectionHandler<Selection> AfterSelectHandler;
private DiscViewSelection<Selection>.SelectionHandler<Selection> RightClickHandler;
private DiscViewSelection<Selection>.SelectionHandler<Selection> LeftClickHandler;
private DiscViewSelection<Selection>.SelectionHandler<Selection> DoubleLeftClickHandler;
private Selection Handle;
private DiscViewSelection(
DiscViewSelection<Selection>.SelectionHandler<Selection> AfterSelectHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> RightClickHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> LeftClickHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> DoubleLeftClickHandler,
Selection Handle)
{
this.AfterSelectHandler = AfterSelectHandler;
this.RightClickHandler = RightClickHandler;
this.LeftClickHandler = LeftClickHandler;
this.DoubleLeftClickHandler = DoubleLeftClickHandler;
this.Handle = Handle;
}
public static DiscViewSelection<Selection> NoHandler(Selection Handle) => new DiscViewSelection<Selection>((DiscViewSelection<Selection>.SelectionHandler<Selection>) null, (DiscViewSelection<Selection>.SelectionHandler<Selection>) null, (DiscViewSelection<Selection>.SelectionHandler<Selection>) null, (DiscViewSelection<Selection>.SelectionHandler<Selection>) null, Handle);
public static DiscViewSelection<Selection> NewHandlersForTreeView(
DiscViewSelection<Selection>.SelectionHandler<Selection> AfterSelectHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> RightClickHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> DoubleLeftClickHandler,
Selection Handle)
{
return new DiscViewSelection<Selection>(AfterSelectHandler, RightClickHandler, (DiscViewSelection<Selection>.SelectionHandler<Selection>) null, DoubleLeftClickHandler, Handle);
}
public static DiscViewSelection<Selection> NewHandlersForListView(
DiscViewSelection<Selection>.SelectionHandler<Selection> RightClickHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> LeftClickHandler,
DiscViewSelection<Selection>.SelectionHandler<Selection> DoubleLeftClickHandler,
Selection Handle)
{
return new DiscViewSelection<Selection>((DiscViewSelection<Selection>.SelectionHandler<Selection>) null, RightClickHandler, LeftClickHandler, DoubleLeftClickHandler, Handle);
}
public void HandleAfterSelect()
{
if (this.AfterSelectHandler == null)
return;
this.AfterSelectHandler(this.Handle);
}
public void HandleLeftClick()
{
if (this.LeftClickHandler == null)
return;
this.LeftClickHandler(this.Handle);
}
public void HandleDoubleLeftClicks()
{
if (this.DoubleLeftClickHandler == null)
return;
this.DoubleLeftClickHandler(this.Handle);
}
public void HandleRightClick()
{
if (this.RightClickHandler == null)
return;
this.RightClickHandler(this.Handle);
}
public void HandleMouseEvent(MouseEventArgs MouseEvent)
{
switch (MouseEvent.Button)
{
case MouseButtons.Left:
if (MouseEvent.Clicks == 1)
{
this.HandleLeftClick();
return;
}
if (MouseEvent.Clicks == 2)
{
this.HandleDoubleLeftClicks();
return;
}
break;
case MouseButtons.Right:
this.HandleRightClick();
return;
}
DiscViewSelection<Selection>.logger.DebugFormat("No handler for {0} with {1} click(s) mouse button(s) {2}", (object) this.Handle, (object) MouseEvent.Clicks, (object) MouseEvent.Button);
}
public delegate void SelectionHandler<HandleType>(HandleType handle);
}
}

View File

@ -0,0 +1,54 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.ExplorerListItemFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using ImageReader.ISO9660.DirectoryRecords;
using SEGATools.DiscFileSystem;
using SEGATools.Formater;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class ExplorerListItemFactory
{
public static ListViewItem CreateItem(
DirectoryRecord DirectoryRecord,
IDiscFileSystem Disc)
{
ListViewItem listViewItem = new ListViewItem(DirectoryRecord.Name, DirectoryRecord.IsDirectory ? 1 : 0);
listViewItem.Name = DirectoryRecord.Name;
listViewItem.Tag = (object) DirectoryRecord;
listViewItem.UseItemStyleForSubItems = true;
listViewItem.ToolTipText = ExplorerToolTipFactory.CreateToolTipText(DirectoryRecord);
listViewItem.SubItems.Add(SizeFormater.ToHumanReadableSize((long) DirectoryRecord.ExtentSize));
listViewItem.SubItems.Add(DirectoryRecord.ExtentSize.ToString());
listViewItem.SubItems.Add(DirectoryRecord.Extent.ToString());
if (DirectoryRecord.RecordingDateTime.HasValue)
listViewItem.SubItems.Add(string.Format("{0:G}", (object) DirectoryRecord.RecordingDateTime));
else
listViewItem.SubItems.Add(Strings.InvalidDateTimeText);
if (!DirectoryRecord.HasValidFileIdentifier)
{
listViewItem.BackColor = Color.OrangeRed;
listViewItem.ForeColor = Color.White;
listViewItem.ToolTipText = Strings.ToolTipInvalidFileIdentifier;
}
else if (Disc.MainBinary != null && Disc.MainBinary.FullPath.Equals(DirectoryRecord.FullPath))
{
listViewItem.Font = new Font(listViewItem.Font, FontStyle.Bold);
listViewItem.ToolTipText = string.Format(Strings.ToolTipMainBinaryWithFormat, (object) DirectoryRecord.Name);
}
return listViewItem;
}
public static ListViewItem CreateParentDirectoryItem(DirectoryRecord DirectoryRecord) => new ListViewItem(DirectoryRecord.PARENT_DIRECTORY_NAME, 2)
{
Name = DirectoryRecord.PARENT_DIRECTORY_NAME,
Tag = (object) DirectoryRecord
};
}
}

View File

@ -0,0 +1,29 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.ExplorerToolTipFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using ImageReader.ISO9660.DirectoryRecords;
using SEGATools.Formater;
using System.Text;
namespace GDRomExplorer.DiscView
{
public class ExplorerToolTipFactory
{
public static string CreateToolTipText(DirectoryRecord directoryRecord)
{
StringBuilder stringBuilder = new StringBuilder();
if (directoryRecord.IsDirectory)
{
stringBuilder.AppendLine(string.Format(Strings.ToolTipFileSizeWithFormat, (object) SizeFormater.ToHumanReadableSize((long) directoryRecord.UsedSpace)));
int count1 = directoryRecord.GetAllSubFiles().Count;
int count2 = directoryRecord.GetAllSubFolder().Count;
stringBuilder.AppendLine(string.Format(Strings.ToolTipDirectoryContentWithFormat, (object) count1, count1 > 1 ? (object) Strings.ToolTipFiles : (object) Strings.ToolTipFile, (object) count2, count2 > 1 ? (object) Strings.ToolTipDirectories : (object) Strings.ToolTipDirectory));
}
return stringBuilder.ToString();
}
}
}

View File

@ -0,0 +1,135 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.ExplorerTreeNodeFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using ImageReader.ISO9660.DirectoryRecords;
using SEGATools.Binary;
using SEGATools.DiscFileSystem;
using SEGATools.Security;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class ExplorerTreeNodeFactory
{
public static TreeNode CreateTree(IDiscFileSystem Disc)
{
TreeNode treeNode1 = ExplorerTreeNodeFactory.CreateTreeNode(Disc);
foreach (IDiscSession session in Disc.Sessions)
{
TreeNode treeNode2 = ExplorerTreeNodeFactory.CreateTreeNode(session);
treeNode1.Nodes.Add(treeNode2);
foreach (IDiscTrack track in session.Tracks)
{
TreeNode treeNode3 = ExplorerTreeNodeFactory.CreateTreeNode(track);
treeNode2.Nodes.Add(treeNode3);
if (track == session.FirstDataTrack)
{
if (session.BootStrap != null)
{
TreeNode treeNode4 = ExplorerTreeNodeFactory.CreateTreeNode(session.BootStrap, Disc);
treeNode3.Nodes.Add(treeNode4);
}
if (session.RootDirectoryRecord != null)
{
string identifier = session.PrimaryVolumeDescriptor.Identifier;
TreeNode discFileSystemTree = ExplorerTreeNodeFactory.CreateDiscFileSystemTree(session.RootDirectoryRecord, identifier);
treeNode3.Nodes.Add(discFileSystemTree);
}
}
}
}
return treeNode1;
}
private static TreeNode CreateDiscFileSystemTree(
DirectoryRecord RootDirectoryRecord,
string RootDirectoryName)
{
TreeNode treeNode = ExplorerTreeNodeFactory.CreateTreeNode(RootDirectoryRecord, RootDirectoryName, 5, 5);
ExplorerTreeNodeFactory.CreateDiscFileSystemTreeRec(treeNode);
return treeNode;
}
private static void CreateDiscFileSystemTreeRec(TreeNode ParentNode)
{
foreach (DirectoryRecord DirectoryRecord in (IEnumerable<DirectoryRecord>) (ParentNode.Tag as DirectoryRecord).SubDirectories.FindAll((Predicate<DirectoryRecord>) (directoryRecord => directoryRecord.IsDirectory)))
{
TreeNode treeNode = ExplorerTreeNodeFactory.CreateTreeNode(DirectoryRecord, 6, 7);
ParentNode.Nodes.Add(treeNode);
ExplorerTreeNodeFactory.CreateDiscFileSystemTreeRec(treeNode);
}
}
private static TreeNode CreateTreeNode(
DirectoryRecord DirectoryRecord,
int ImageIndex,
int SelectedImageIndex)
{
return ExplorerTreeNodeFactory.CreateTreeNode(DirectoryRecord, DirectoryRecord.Name, ImageIndex, SelectedImageIndex);
}
private static TreeNode CreateTreeNode(
DirectoryRecord DirectoryRecord,
string Name,
int ImageIndex,
int SelectedImageIndex)
{
return new TreeNode(Name, ImageIndex, SelectedImageIndex)
{
Name = Name,
Tag = (object) DirectoryRecord,
ToolTipText = ExplorerToolTipFactory.CreateToolTipText(DirectoryRecord)
};
}
private static TreeNode CreateTreeNode(
InitialProgram InitialProgram,
IDiscFileSystem Disc)
{
List<SEGALibrary> segaLibraries = Disc.GetSEGALibraries((object) InitialProgram);
InitialProgramExtended initialProgramExtended = InitialProgramExtended.create(InitialProgram, segaLibraries);
return new TreeNode(initialProgramExtended.FileName, 4, 4)
{
Name = initialProgramExtended.FileName,
Tag = (object) initialProgramExtended
};
}
private static TreeNode CreateTreeNode(IDiscTrack DiscTrack)
{
TreeNode treeNode = new TreeNode(DiscTrack.ToString());
switch (DiscTrack.TrackData)
{
case TrackModeType.Audio:
treeNode.ImageIndex = 3;
treeNode.ToolTipText = string.Format("CD-DA ({0})", (object) DiscTrack.Name);
break;
case TrackModeType.Data:
treeNode.ImageIndex = 2;
treeNode.ToolTipText = string.Format("Data ({0})", (object) DiscTrack.Name);
break;
}
treeNode.Name = DiscTrack.Name;
treeNode.Tag = (object) DiscTrack;
treeNode.SelectedImageIndex = treeNode.ImageIndex;
return treeNode;
}
private static TreeNode CreateTreeNode(IDiscSession DiscSession) => new TreeNode(DiscSession.Name, 1, 1)
{
Name = DiscSession.Name,
Tag = (object) DiscSession
};
private static TreeNode CreateTreeNode(IDiscFileSystem Disc) => new TreeNode(Disc.DiscName, 0, 0)
{
Name = Disc.DiscName,
Tag = (object) Disc
};
}
}

View File

@ -0,0 +1,23 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.IDiscViewSelection
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public interface IDiscViewSelection
{
void HandleAfterSelect();
void HandleDoubleLeftClicks();
void HandleLeftClick();
void HandleRightClick();
void HandleMouseEvent(MouseEventArgs MouseEvent);
}
}

View File

@ -0,0 +1,228 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.MenuItemFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using ImageReader.ISO9660.DirectoryRecords;
using SEGATools.DiscFileSystem;
using SEGATools.Security;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace GDRomExplorer.DiscView
{
public class MenuItemFactory
{
private UserActions Context;
private ImageList ContextMenuImageList;
public MenuItemFactory(UserActions Context, ImageList ImageList)
{
this.Context = Context;
this.ContextMenuImageList = ImageList;
}
private ToolStripItem CreateMenuItem(
string Text,
int ImageIndex,
EventHandler Handler)
{
return (ToolStripItem) new ToolStripMenuItem(Text, this.ContextMenuImageList.Images[ImageIndex], Handler);
}
public ToolStripItem[] CreateDiscMenuItems(IDiscFileSystem Disc)
{
ToolStripItem menuItem = this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemExportForGDEmu, 0, this.Context.GetHandler(UserActions.Action.ExportForGDEmu));
menuItem.Enabled = Disc.CanBeExportedToGdi;
menuItem.Tag = (object) Disc;
return new ToolStripItem[1]{ menuItem };
}
public ToolStripItem[] CreateDiscSessionMenuItems(IDiscSession Session)
{
ToolStripItem[] toolStripItemArray = new ToolStripItem[2]
{
this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemCreateCUE, 0, this.Context.GetHandler(UserActions.Action.CreateCueSheet)),
null
};
toolStripItemArray[0].Enabled = Session.Disc.CanBeExportedToCueSheet && Session.Tracks.Count > 0;
toolStripItemArray[0].Tag = (object) Session;
toolStripItemArray[1] = this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemConvertGDDA, 0, this.Context.GetHandler(UserActions.Action.ShowGDDAConversion));
toolStripItemArray[1].Enabled = Session.Disc.CanExtractData && Session.AudioTracks.Count > 0;
toolStripItemArray[1].Tag = (object) Session;
return toolStripItemArray;
}
public ToolStripItem[] CreateDiscTrackMenuItems(IDiscTrack Track)
{
IList<ToolStripItem> source = (IList<ToolStripItem>) new List<ToolStripItem>();
string fileName = Path.GetFileName(Track.Name);
DirectoryRecord rootDirectoryRecord = Track.Session.RootDirectoryRecord;
ToolStripItem menuItem1 = this.CreateMenuItem(string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemExtract, (object) fileName), 0, this.Context.GetHandler(UserActions.Action.ExtractItem));
menuItem1.Enabled = Track.Session.Disc.CanExtractData;
menuItem1.Tag = (object) Track;
source.Add(menuItem1);
if (Track.TrackData == TrackModeType.Data && Track == Track.Session.FirstDataTrack)
{
ToolStripItem menuItem2 = this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemGenerateSortFile, 1, this.Context.GetHandler(UserActions.Action.CreateSortFile));
menuItem2.Tag = (object) Track.Session;
source.Add(menuItem2);
ToolStripItem menuItem3 = this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemViewPvd, 3, this.Context.GetHandler(UserActions.Action.ShowPrimaryVolumeDescriptor));
menuItem3.Tag = (object) Track;
source.Add(menuItem3);
}
else if (Track.TrackData == TrackModeType.Audio)
{
ToolStripItem menuItem2 = this.CreateMenuItem(string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemConvertAudio, (object) fileName), 0, this.Context.GetHandler(UserActions.Action.ConvertGDDA));
menuItem2.Enabled = Track.Session.Disc.CanExtractData;
menuItem2.Tag = (object) Track;
source.Add(menuItem2);
}
return source.ToArray<ToolStripItem>();
}
public ToolStripItem[] CreateInitialProgramMenuItems(
InitialProgramExtended InitialProgramFile)
{
List<ToolStripItem> toolStripItemList = new List<ToolStripItem>();
ToolStripItem menuItem1 = this.CreateMenuItem(GDRomExplorer.Resources.Strings.ContextMenuItemViewIP, 2, this.Context.GetHandler(UserActions.Action.ShowBootSector));
menuItem1.Tag = (object) InitialProgramFile;
toolStripItemList.Add(menuItem1);
ToolStripItem menuItem2 = this.CreateMenuItem(string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemExtractIP, (object) InitialProgramFile.FileName), 0, this.Context.GetHandler(UserActions.Action.ExtractBootSector));
menuItem2.Tag = (object) InitialProgramFile;
toolStripItemList.Add(menuItem2);
return toolStripItemList.ToArray();
}
public ToolStripItem[] CreateFileExtractMenuItems(
string ItemLabel,
object Tag,
bool SupportDecryption)
{
string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemExtract, (object) ItemLabel);
string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemDecryptAndExtract, (object) ItemLabel);
return this.CreateFileMenuItems(string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemExtract, (object) ItemLabel), string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemDecryptAndExtract, (object) ItemLabel), Tag, SupportDecryption);
}
public ToolStripItem[] CreateFileExtractContentMenuItems(
string ItemLabel,
object Tag)
{
return this.CreateFileMenuItems(string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemExtractContent, (object) ItemLabel), string.Format(GDRomExplorer.Resources.Strings.ContextMenuItemDecryptAndExtract, (object) ItemLabel), Tag, false);
}
private ToolStripItem[] CreateFileMenuItems(
string ExtractText,
string DecryptExtractText,
object Tag,
bool SupportDecryption)
{
List<ToolStripItem> toolStripItemList = new List<ToolStripItem>();
if (SupportDecryption)
{
ToolStripItem menuItem = this.CreateMenuItem(DecryptExtractText, 0, this.Context.GetHandler(UserActions.Action.DecryptNaomiBinary));
menuItem.Tag = Tag;
toolStripItemList.Add(menuItem);
}
ToolStripItem menuItem1 = this.CreateMenuItem(ExtractText, 0, this.Context.GetHandler(UserActions.Action.ExtractItem));
menuItem1.Tag = Tag;
toolStripItemList.Add(menuItem1);
return toolStripItemList.ToArray();
}
public ToolStripItem[] CreateDiscWithSessionTopMenuItem(IDiscFileSystem Disc)
{
List<ToolStripItem> toolStripItemList = new List<ToolStripItem>();
toolStripItemList.AddRange((IEnumerable<ToolStripItem>) this.CreateDiscMenuItems(Disc));
toolStripItemList.Add((ToolStripItem) new ToolStripSeparator());
foreach (IDiscSession session in Disc.Sessions)
{
ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(session.Name);
toolStripMenuItem.DropDownItems.AddRange(this.CreateDiscSessionMenuItems(session));
toolStripItemList.Add((ToolStripItem) toolStripMenuItem);
}
return toolStripItemList.ToArray();
}
public ToolStripMenuItem CreateSelectionTopMenuItemForListView(
ToolStripItem[] MenuItems)
{
ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(GDRomExplorer.Resources.Strings.EditSelectionMenuItemName);
toolStripMenuItem.DropDownItems.AddRange(MenuItems);
toolStripMenuItem.Enabled = toolStripMenuItem.DropDownItems.Count > 0;
return toolStripMenuItem;
}
public ToolStripItem[] CreateSelectionMenuItemsForListView(
object NewSelection,
IDiscFileSystem Disc)
{
ToolStripItem[] toolStripItemArray = new ToolStripItem[0];
List<DirectoryRecord> directoryRecordList = NewSelection is List<DirectoryRecord> ? NewSelection as List<DirectoryRecord> : throw new NotSupportedException();
if (directoryRecordList.Count != 1)
return this.CreateFileExtractMenuItems(GDRomExplorer.Resources.Strings.MsgBoxToolStripMenuSelectedFiles, NewSelection, false);
DirectoryRecord directoryRecord = directoryRecordList[0];
string ItemLabel = directoryRecord == Disc.MainBinary ? string.Format(GDRomExplorer.Resources.Strings.ToolTipMainBinaryWithFormat, (object) directoryRecord.Name) : directoryRecord.Name;
bool SupportDecryption = Disc.DiscType == DiscImageType.Naomi && directoryRecord == Disc.MainBinary;
return this.CreateFileExtractMenuItems(ItemLabel, NewSelection, SupportDecryption);
}
public ToolStripItem[] CreateSelectionDisabledTopMenuItem() => new ToolStripItem[0];
public static ToolStripMenuItem CreateEditSelectionTopMenuItem(
ToolStripItem[] MenuItems)
{
ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(GDRomExplorer.Resources.Strings.EditSelectionMenuItemName);
if (MenuItems != null && MenuItems.Length > 0)
toolStripMenuItem.DropDownItems.AddRange(MenuItems);
toolStripMenuItem.Enabled = MenuItems != null && MenuItems.Length > 0;
return toolStripMenuItem;
}
public static ToolStripMenuItem CreateEditDiscTopMenuItem(
ToolStripItem[] MenuItems)
{
ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(GDRomExplorer.Resources.Strings.EditDiscMenuItemName);
toolStripMenuItem.DropDownItems.AddRange(MenuItems);
toolStripMenuItem.Enabled = MenuItems != null && MenuItems.Length > 0;
return toolStripMenuItem;
}
public static ToolStripItem[] CreateEditMenuItems(
ToolStripItem[] DiscMenuItems,
ToolStripItem[] SelectionMenuItems)
{
return new ToolStripItem[3]
{
(ToolStripItem) MenuItemFactory.CreateEditSelectionTopMenuItem(SelectionMenuItems),
(ToolStripItem) new ToolStripSeparator(),
(ToolStripItem) MenuItemFactory.CreateEditDiscTopMenuItem(DiscMenuItems)
};
}
public ToolStripItem[] CreateSelectionMenuItemsForTreeView(object NewSelection)
{
ToolStripItem[] toolStripItemArray = new ToolStripItem[0];
switch (NewSelection)
{
case IDiscFileSystem _:
return this.CreateDiscMenuItems(NewSelection as IDiscFileSystem);
case IDiscSession _:
return this.CreateDiscSessionMenuItems(NewSelection as IDiscSession);
case IDiscTrack _:
return this.CreateDiscTrackMenuItems(NewSelection as IDiscTrack);
case InitialProgramExtended _:
return this.CreateInitialProgramMenuItems(NewSelection as InitialProgramExtended);
case DirectoryRecord _:
DirectoryRecord directoryRecord = NewSelection as DirectoryRecord;
return this.CreateFileExtractContentMenuItems(directoryRecord.Name, (object) directoryRecord.SubDirectories);
default:
throw new NotSupportedException();
}
}
}
}

View File

@ -0,0 +1,34 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.DiscView.UserActions
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
using System.Collections.Generic;
namespace GDRomExplorer.DiscView
{
public class UserActions
{
private Dictionary<UserActions.Action, EventHandler> EventHandlers = new Dictionary<UserActions.Action, EventHandler>();
public void SetHandler(UserActions.Action Action, EventHandler Handler) => this.EventHandlers.Add(Action, Handler);
public EventHandler GetHandler(UserActions.Action Action) => this.EventHandlers.ContainsKey(Action) ? this.EventHandlers[Action] : throw new NotSupportedException("Action not supported");
public enum Action
{
ExportForGDEmu,
CreateCueSheet,
ShowGDDAConversion,
ShowBootSector,
ExtractBootSector,
ExtractItem,
CreateSortFile,
ShowPrimaryVolumeDescriptor,
ConvertGDDA,
DecryptNaomiBinary,
}
}
}

View File

@ -0,0 +1,24 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Events.CancelEventArgs`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.ComponentModel;
namespace GDRomExplorer.Events
{
public class CancelEventArgs<T> : CancelEventArgs, IEventArgs<T>
{
public CancelEventArgs(T value)
: this(value, false)
{
}
public CancelEventArgs(T value, bool cancel)
: base(cancel)
=> this.Value = value;
public T Value { get; private set; }
}
}

View File

@ -0,0 +1,21 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Events.ChangingData`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer.Events
{
public class ChangingData<T>
{
public ChangingData(T oldData, T newData)
{
this.OldData = oldData;
this.NewData = newData;
}
public T OldData { get; private set; }
public T NewData { get; private set; }
}
}

View File

@ -0,0 +1,17 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Events.EventArgs`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
namespace GDRomExplorer.Events
{
public class EventArgs<T> : EventArgs, IEventArgs<T>
{
public EventArgs(T value) => this.Value = value;
public T Value { get; private set; }
}
}

View File

@ -0,0 +1,13 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Events.IEventArgs`1
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer.Events
{
public interface IEventArgs<T>
{
T Value { get; }
}
}

220
Explorer/Explorer.csproj Normal file
View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Project was exported from assembly: C:\Games\gdrom\GD-ROM Explorer.exe-->
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{47780501-F392-43CA-A50C-9479421B4B55}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AssemblyName>GD-ROM Explorer</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<RootNamespace>GDRomExplorer</RootNamespace>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.6.3.0</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Resources\icons\gdromexplorer.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>packages\log4net.2.0.12\lib\net35\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="AppStatus.cs" />
<Compile Include="AssemblyGitBuildSHA1.cs" />
<Compile Include="AssemblyGitBuildBranch.cs" />
<Compile Include="Logger.cs" />
<Compile Include="Program.cs" />
<Compile Include="DiscView\ExplorerListItemFactory.cs" />
<Compile Include="DiscView\DiscSelectionHandlerFactory.cs" />
<Compile Include="DiscView\DiscSelectionHandlerFactory`1.cs" />
<Compile Include="DiscView\DiscTreeViewSelectionHandlerFactory.cs" />
<Compile Include="DiscView\DiscListViewSelectionHandlerFactory.cs" />
<Compile Include="DiscView\ExplorerToolTipFactory.cs" />
<Compile Include="DiscView\ExplorerTreeNodeFactory.cs" />
<Compile Include="DiscView\UserActions.cs" />
<Compile Include="DiscView\ContextMenuManager.cs" />
<Compile Include="DiscView\IDiscViewSelection.cs" />
<Compile Include="DiscView\DiscViewSelection`1.cs" />
<Compile Include="DiscView\MenuItemFactory.cs" />
<Compile Include="Events\IEventArgs`1.cs" />
<Compile Include="Events\EventArgs`1.cs" />
<Compile Include="Events\CancelEventArgs`1.cs" />
<Compile Include="Events\ChangingData`1.cs" />
<Compile Include="Forms\FormAudioConversionSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormAbout.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormGDEmuExportSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormSortFileOptions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormGetDESKey.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormProcess.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormGdda.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormLoading.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormInitialProgram.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormPrimaryVolumeDescriptor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\GDRomExplorerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Others\UserProcessEventArgsConverter.cs" />
<Compile Include="Others\ListViewColumnSorter.cs" />
<Compile Include="Properties\Resources.cs" />
<Compile Include="Properties\Settings.cs" />
<Compile Include="ShellDataTransfert\FileDescriptor.cs" />
<Compile Include="ShellDataTransfert\FileDescriptorFactory.cs" />
<Compile Include="ShellDataTransfert\DataObjectEx.cs" />
<Compile Include="ShellDataTransfert\NativeMethods.cs" />
<Compile Include="ShellDataTransfert\StreamWrapper.cs" />
<Compile Include="ShellDataTransfert\STGTY.cs" />
<Compile Include="ShellDataTransfert\LOCKTYPE.cs" />
<Compile Include="UserControls\GDDAConverterTool.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UserControls\GDEmuExportSettings.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\InitialProgramOpener.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UserControls\DiscViewExplorer.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\DiscViewOpener.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\NaomiEncryptDecryptTool.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UserControls\PrimaryVolumeDescriptorViewer.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Resources\Strings.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Forms\FormAbout.resx" />
<EmbeddedResource Include="Forms\FormAudioConversionSettings.resx" />
<EmbeddedResource Include="Forms\FormGdda.resx" />
<EmbeddedResource Include="Forms\FormGDEmuExportSettings.resx" />
<EmbeddedResource Include="Forms\FormGetDESKey.resx" />
<EmbeddedResource Include="Forms\FormInitialProgram.resx" />
<EmbeddedResource Include="Forms\FormLoading.resx" />
<EmbeddedResource Include="Forms\FormPrimaryVolumeDescriptor.resx" />
<EmbeddedResource Include="Forms\FormProcess.resx" />
<EmbeddedResource Include="Forms\FormSettings.resx" />
<EmbeddedResource Include="Forms\FormSortFileOptions.resx" />
<EmbeddedResource Include="Forms\GDRomExplorerForm.resx" />
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Strings.resx" />
<EmbeddedResource Include="UserControls\DiscViewExplorer.resx" />
<EmbeddedResource Include="UserControls\DiscViewOpener.resx" />
<EmbeddedResource Include="UserControls\GDDAConverterTool.resx" />
<EmbeddedResource Include="UserControls\GDEmuExportSettings.resx" />
<EmbeddedResource Include="UserControls\InitialProgramOpener.resx" />
<EmbeddedResource Include="UserControls\NaomiEncryptDecryptTool.resx" />
<EmbeddedResource Include="UserControls\PrimaryVolumeDescriptorViewer.resx" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ImageReader\ImageReader.csproj">
<Project>{2185f55e-a4da-486f-acc8-3ee955205ce4}</Project>
<Name>ImageReader</Name>
</ProjectReference>
<ProjectReference Include="..\SEGATools\SEGATools.csproj">
<Project>{4d3ab913-88d2-4dd1-a403-ea46d14c98e6}</Project>
<Name>SEGATools</Name>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="log4net.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\file.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons\gdromexplorer.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons\gdromexplorer2.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

294
Explorer/Forms/FormAbout.cs Normal file
View File

@ -0,0 +1,294 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormAbout
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Properties;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
internal class FormAbout : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IContainer components;
private TableLayoutPanel tableLayoutPanel;
private PictureBox logoPictureBox;
private TextBox textBoxDescription;
private TableLayoutPanel tableLayoutPanelButton;
private Button okButton;
private PictureBox pictureBoxPaypal;
private Panel panel1;
private LinkLabel llblog;
public FormAbout()
{
this.InitializeComponent();
this.Text = string.Format("About {0}", (object) this.AssemblyTitle);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine(string.Format("{0}", (object) this.AssemblyProduct));
stringBuilder.AppendLine(string.Format("Version {0} build {1}", (object) this.AssemblyVersion, (object) this.AssemblyBuildSHA1));
stringBuilder.Append(string.Format("Created by {0} ({1})", (object) this.AssemblyCompany, (object) this.AssemblyCopyright));
this.textBoxDescription.Text = stringBuilder.ToString();
this.llblog.Text = GDRomExplorer.Resources.Strings.GoToBlogLinkTitle;
}
public string AssemblyTitle
{
get
{
object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyTitleAttribute), false);
if (customAttributes.Length > 0)
{
AssemblyTitleAttribute assemblyTitleAttribute = (AssemblyTitleAttribute) customAttributes[0];
if (!string.IsNullOrEmpty(assemblyTitleAttribute.Title))
return assemblyTitleAttribute.Title;
}
return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}
public string AssemblyVersion
{
get
{
Version version = Assembly.GetExecutingAssembly().GetName().Version;
return string.Format("{0}.{1}.{2}", (object) version.Major, (object) version.Minor, (object) version.Build);
}
}
public string AssemblyBuildSHA1
{
get
{
try
{
return typeof (AssemblyGitBuildSHA1).Assembly.GetCustomAttributes(typeof (AssemblyGitBuildSHA1), false).Cast<AssemblyGitBuildSHA1>().First<AssemblyGitBuildSHA1>().GitBuildSHA1;
}
catch (Exception ex)
{
logger.Error(ex);
return "unknown";
}
}
}
public string AssemblyBuildBranch
{
get
{
try
{
return typeof (AssemblyGitBuildBranch).Assembly.GetCustomAttributes(typeof (AssemblyGitBuildBranch), false).Cast<AssemblyGitBuildBranch>().First<AssemblyGitBuildBranch>().GitBuildBranch;
}
catch (Exception ex)
{
logger.Error(ex);
return "unknown";
}
}
}
public string AssemblyDescription
{
get
{
object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyDescriptionAttribute), false);
return customAttributes.Length == 0 ? "" : ((AssemblyDescriptionAttribute) customAttributes[0]).Description;
}
}
public string AssemblyProduct
{
get
{
object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyProductAttribute), false);
return customAttributes.Length == 0 ? "" : ((AssemblyProductAttribute) customAttributes[0]).Product;
}
}
public string AssemblyCopyright
{
get
{
object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyCopyrightAttribute), false);
return customAttributes.Length == 0 ? "" : ((AssemblyCopyrightAttribute) customAttributes[0]).Copyright;
}
}
public string AssemblyCompany
{
get
{
object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyCompanyAttribute), false);
return customAttributes.Length == 0 ? "" : ((AssemblyCompanyAttribute) customAttributes[0]).Company;
}
}
private void paypalDonatePictureBox_Click(object sender, EventArgs e)
{
try
{
Process.Start(Settings.Default.PayPalDonateUrl);
}
catch
{
}
}
private void llblog_LinkClicked(object sender, EventArgs e)
{
try
{
Process.Start(Settings.Default.BlogUrl);
}
catch
{
}
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (FormAbout));
this.tableLayoutPanel = new TableLayoutPanel();
this.logoPictureBox = new PictureBox();
this.textBoxDescription = new TextBox();
this.tableLayoutPanelButton = new TableLayoutPanel();
this.pictureBoxPaypal = new PictureBox();
this.panel1 = new Panel();
this.llblog = new LinkLabel();
this.okButton = new Button();
this.tableLayoutPanel.SuspendLayout();
((ISupportInitialize) this.logoPictureBox).BeginInit();
this.tableLayoutPanelButton.SuspendLayout();
((ISupportInitialize) this.pictureBoxPaypal).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
this.tableLayoutPanel.ColumnCount = 2;
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33f));
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 67f));
this.tableLayoutPanel.Controls.Add((Control) this.logoPictureBox, 0, 0);
this.tableLayoutPanel.Controls.Add((Control) this.textBoxDescription, 1, 0);
this.tableLayoutPanel.Controls.Add((Control) this.tableLayoutPanelButton, 1, 1);
this.tableLayoutPanel.Dock = DockStyle.Fill;
this.tableLayoutPanel.Location = new Point(9, 9);
this.tableLayoutPanel.Name = "tableLayoutPanel";
this.tableLayoutPanel.RowCount = 2;
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 42.64706f));
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 57.35294f));
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 20f));
this.tableLayoutPanel.Size = new Size(417, 136);
this.tableLayoutPanel.TabIndex = 0;
this.logoPictureBox.Dock = DockStyle.Fill;
this.logoPictureBox.Image = (Image) componentResourceManager.GetObject("logoPictureBox.Image");
this.logoPictureBox.Location = new Point(3, 3);
this.logoPictureBox.Name = "logoPictureBox";
this.tableLayoutPanel.SetRowSpan((Control) this.logoPictureBox, 2);
this.logoPictureBox.Size = new Size(131, 130);
this.logoPictureBox.TabIndex = 12;
this.logoPictureBox.TabStop = false;
this.textBoxDescription.BackColor = SystemColors.Window;
this.textBoxDescription.BorderStyle = BorderStyle.None;
this.textBoxDescription.Dock = DockStyle.Fill;
this.textBoxDescription.Location = new Point(143, 3);
this.textBoxDescription.Margin = new Padding(6, 3, 3, 3);
this.textBoxDescription.Multiline = true;
this.textBoxDescription.Name = "textBoxDescription";
this.textBoxDescription.ReadOnly = true;
this.textBoxDescription.Size = new Size(271, 52);
this.textBoxDescription.TabIndex = 23;
this.textBoxDescription.TabStop = false;
this.textBoxDescription.Text = "Description";
this.tableLayoutPanelButton.ColumnCount = 2;
this.tableLayoutPanelButton.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50f));
this.tableLayoutPanelButton.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50f));
this.tableLayoutPanelButton.Controls.Add((Control) this.pictureBoxPaypal, 1, 0);
this.tableLayoutPanelButton.Controls.Add((Control) this.panel1, 0, 0);
this.tableLayoutPanelButton.Controls.Add((Control) this.okButton, 1, 1);
this.tableLayoutPanelButton.Dock = DockStyle.Fill;
this.tableLayoutPanelButton.Location = new Point(140, 61);
this.tableLayoutPanelButton.Name = "tableLayoutPanelButton";
this.tableLayoutPanelButton.RowCount = 2;
this.tableLayoutPanelButton.RowStyles.Add(new RowStyle(SizeType.Percent, 100f));
this.tableLayoutPanelButton.RowStyles.Add(new RowStyle(SizeType.Absolute, 37f));
this.tableLayoutPanelButton.RowStyles.Add(new RowStyle(SizeType.Absolute, 20f));
this.tableLayoutPanelButton.Size = new Size(274, 72);
this.tableLayoutPanelButton.TabIndex = 27;
this.pictureBoxPaypal.Image = (Image) GDRomExplorer.Properties.Resources.paypal_donate;
this.pictureBoxPaypal.Location = new Point(140, 3);
this.pictureBoxPaypal.Name = "pictureBoxPaypal";
this.pictureBoxPaypal.Size = new Size(131, 29);
this.pictureBoxPaypal.SizeMode = PictureBoxSizeMode.CenterImage;
this.pictureBoxPaypal.TabIndex = 28;
this.pictureBoxPaypal.TabStop = false;
this.pictureBoxPaypal.Click += new EventHandler(this.paypalDonatePictureBox_Click);
this.panel1.Controls.Add((Control) this.llblog);
this.panel1.Dock = DockStyle.Fill;
this.panel1.Location = new Point(3, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new Size(131, 29);
this.panel1.TabIndex = 33;
this.llblog.ActiveLinkColor = Color.FromArgb(248, 48, 0);
this.llblog.AutoSize = true;
this.llblog.LinkBehavior = LinkBehavior.HoverUnderline;
this.llblog.LinkColor = Color.FromArgb(248, 48, 0);
this.llblog.Location = new Point(25, 8);
this.llblog.Name = "llblog";
this.llblog.Size = new Size(40, 13);
this.llblog.TabIndex = 24;
this.llblog.TabStop = true;
this.llblog.Text = "blogUrl";
this.llblog.TextAlign = ContentAlignment.MiddleCenter;
this.llblog.Click += new EventHandler(this.llblog_LinkClicked);
this.okButton.Anchor = AnchorStyles.None;
this.okButton.DialogResult = DialogResult.OK;
this.okButton.FlatStyle = FlatStyle.Popup;
this.okButton.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.okButton.ForeColor = Color.FromArgb(248, 48, 0);
this.okButton.Location = new Point(151, 42);
this.okButton.Name = "okButton";
this.okButton.Size = new Size(108, 22);
this.okButton.TabIndex = 31;
this.okButton.Text = "&Ok";
this.okButton.UseVisualStyleBackColor = false;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.ClientSize = new Size(435, 154);
this.Controls.Add((Control) this.tableLayoutPanel);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormAbout);
this.Padding = new Padding(9);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "AboutBox";
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
((ISupportInitialize) this.logoPictureBox).EndInit();
this.tableLayoutPanelButton.ResumeLayout(false);
((ISupportInitialize) this.pictureBoxPaypal).EndInit();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,89 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormAudioConversionSettings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using SEGATools.Audio;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormAudioConversionSettings : Form
{
private IContainer components;
private Button btOk;
private Button btCancel;
private AudioConversionSettingsViewer audioConversionSettingsViewer;
public AudioConversionSettings AudioConversionSettings => this.audioConversionSettingsViewer.AudioConversionSettings;
public FormAudioConversionSettings() => this.InitializeComponent();
private void btCancel_Click(object sender, EventArgs e) => this.Close();
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.btOk = new Button();
this.btCancel = new Button();
this.audioConversionSettingsViewer = new AudioConversionSettingsViewer();
this.SuspendLayout();
this.btOk.DialogResult = DialogResult.OK;
this.btOk.FlatStyle = FlatStyle.Popup;
this.btOk.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btOk.ForeColor = Color.FromArgb(248, 48, 0);
this.btOk.Location = new Point(195, 52);
this.btOk.Name = "btOk";
this.btOk.Size = new Size((int) sbyte.MaxValue, 22);
this.btOk.TabIndex = 1;
this.btOk.Text = "&OK";
this.btOk.UseVisualStyleBackColor = false;
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(12, 52);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size((int) sbyte.MaxValue, 22);
this.btCancel.TabIndex = 2;
this.btCancel.Text = "&Cancel";
this.btCancel.UseVisualStyleBackColor = false;
this.btCancel.Click += new EventHandler(this.btCancel_Click);
this.audioConversionSettingsViewer.AutoSize = true;
this.audioConversionSettingsViewer.BackColor = Color.Transparent;
this.audioConversionSettingsViewer.Location = new Point(9, 12);
this.audioConversionSettingsViewer.Name = "audioConversionSettingsViewer";
this.audioConversionSettingsViewer.Size = new Size(325, 23);
this.audioConversionSettingsViewer.TabIndex = 3;
this.AcceptButton = (IButtonControl) this.btOk;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.ClientSize = new Size(334, 86);
this.Controls.Add((Control) this.audioConversionSettingsViewer);
this.Controls.Add((Control) this.btCancel);
this.Controls.Add((Control) this.btOk);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormAudioConversionSettings);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Audio Conversion Options";
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,130 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormGDEmuExportSettings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using GDRomExplorer.UserControls;
using SEGATools.DiscFileSystem;
using SEGATools.GDEmu;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormGDEmuExportSettings : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private FormProcess formProcess;
private IContainer components;
private GDEmuExportSettings gdEmuExportSettings;
private Button btCancel;
private Button btOk;
private GDEmuConverter gdEmuConverter;
public IDiscFileSystem InputDiscImage => this.gdEmuExportSettings.InputDiscImage;
public FormGDEmuExportSettings() => this.InitializeComponent();
public FormGDEmuExportSettings(string InitialDirectory)
: this()
=> this.gdEmuExportSettings.InitialDirectory = InitialDirectory;
public FormGDEmuExportSettings(IDiscFileSystem DiscFileSystem)
: this()
=> this.SetLoadedDiscImage(DiscFileSystem);
private void SetLoadedDiscImage(IDiscFileSystem discFileSystem) => this.gdEmuExportSettings.SetLoadedDiscImage(discFileSystem);
private bool AreSettingsValid() => this.gdEmuExportSettings.InputDiscImage != null && !string.IsNullOrEmpty(this.gdEmuExportSettings.ExportOptions.OutputPath);
private void ShowIncompleteMessagBox()
{
string text = this.gdEmuExportSettings.InputDiscImage != null ? Strings.MsgBoxGDEmuSettingsOutputPathMissing : Strings.MsgBoxGDEmuSettingsImageMissing;
FormGDEmuExportSettings.logger.WarnFormat("Cannot start the conversion: {0}", (object) text);
int num = (int) MessageBox.Show((IWin32Window) this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
private void StartConversion()
{
Guid TaskId = Guid.NewGuid();
this.formProcess = FormProcess.createForGDEmuConverter(this.gdEmuConverter, TaskId);
this.gdEmuConverter.ConvertAsync(this.gdEmuExportSettings.InputDiscImage, this.gdEmuExportSettings.ExportOptions, (object) TaskId);
}
private void btOk_Click(object sender, EventArgs e)
{
if (this.AreSettingsValid())
this.StartConversion();
else
this.ShowIncompleteMessagBox();
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = (IContainer) new Container();
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (FormGDEmuExportSettings));
this.btCancel = new Button();
this.btOk = new Button();
this.gdEmuExportSettings = new GDEmuExportSettings();
this.gdEmuConverter = new GDEmuConverter(this.components);
this.SuspendLayout();
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(12, 174);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size((int) sbyte.MaxValue, 22);
this.btCancel.TabIndex = 2;
this.btCancel.Text = "&Close";
this.btCancel.UseVisualStyleBackColor = false;
this.btOk.CausesValidation = false;
this.btOk.FlatStyle = FlatStyle.Popup;
this.btOk.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btOk.ForeColor = Color.FromArgb(248, 48, 0);
this.btOk.Location = new Point(340, 174);
this.btOk.Name = "btOk";
this.btOk.Size = new Size((int) sbyte.MaxValue, 22);
this.btOk.TabIndex = 1;
this.btOk.Text = "&OK";
this.btOk.UseVisualStyleBackColor = false;
this.btOk.Click += new EventHandler(this.btOk_Click);
this.gdEmuExportSettings.AutoSize = true;
this.gdEmuExportSettings.BackColor = SystemColors.Window;
this.gdEmuExportSettings.InitialDirectory = "";
this.gdEmuExportSettings.Location = new Point(0, 0);
this.gdEmuExportSettings.Name = "gdEmuExportSettings";
this.gdEmuExportSettings.Size = new Size(480, 157);
this.gdEmuExportSettings.TabIndex = 0;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.CausesValidation = false;
this.ClientSize = new Size(479, 208);
this.Controls.Add((Control) this.btCancel);
this.Controls.Add((Control) this.btOk);
this.Controls.Add((Control) this.gdEmuExportSettings);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon");
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormGDEmuExportSettings);
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Export GDI for GDEMU";
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

File diff suppressed because one or more lines are too long

270
Explorer/Forms/FormGdda.cs Normal file
View File

@ -0,0 +1,270 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormGdda
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using SEGATools.Audio;
using SEGATools.DiscFileSystem;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormGdda : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IDiscSession discSession;
private List<IDiscTrack> selectedDiscTracks;
private IContainer components;
private Button btConvertSelection;
private GroupBox groupBox;
private Button btUnselectAll;
private Button btInverseSelection;
private Button btSelectAll;
private ListView listViewTracks;
private ColumnHeader columnHeader1;
private ColumnHeader columnHeader2;
private Button btClose;
private FolderBrowserDialog folderBrowserDialogForAudio;
private SaveFileDialog saveFileDialogForAudio;
private AudioConversionSettingsViewer audioConversionSettingsViewer;
public List<IDiscTrack> SelectedDiscTracks => this.selectedDiscTracks.ToList<IDiscTrack>();
public AudioConversionSettings AudioConversionSettings => this.audioConversionSettingsViewer.AudioConversionSettings;
public FormGdda(IDiscSession discSession)
{
this.InitializeComponent();
this.discSession = discSession;
this.selectedDiscTracks = new List<IDiscTrack>();
}
private void frmGdda_Load(object sender, EventArgs e)
{
this.LoadTracks();
this.UpdateConvertButton();
this.listViewTracks.ItemCheck += new ItemCheckEventHandler(this.listViewTracks_ItemCheck);
this.listViewTracks.ItemChecked += new ItemCheckedEventHandler(this.listViewTracks_ItemChecked);
this.listViewTracks.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(this.listViewTracks_ItemSelectionChanged);
}
private void listViewTracks_ItemCheck(object sender, ItemCheckEventArgs e) => this.UpdateConvertButton();
private void listViewTracks_ItemChecked(object sender, ItemCheckedEventArgs e) => this.UpdateConvertButton();
private void listViewTracks_ItemSelectionChanged(
object sender,
ListViewItemSelectionChangedEventArgs e)
{
this.UpdateConvertButton();
}
private void UpdateConvertButton() => this.btConvertSelection.Enabled = this.listViewTracks.CheckedItems.Count > 0;
private void LoadTracks()
{
this.listViewTracks.BeginUpdate();
this.listViewTracks.Items.Clear();
foreach (IDiscTrack audioTrack in this.discSession.AudioTracks)
this.listViewTracks.Items.Add(new ListViewItem()
{
SubItems = {
audioTrack.ToString()
},
Tag = (object) audioTrack,
Checked = true,
ToolTipText = audioTrack.FileName
});
this.listViewTracks.EndUpdate();
}
private void EnableAll(bool isEnabled)
{
foreach (ListViewItem listViewItem in this.listViewTracks.Items)
listViewItem.Checked = isEnabled;
}
private void InverseSelection()
{
foreach (ListViewItem listViewItem in this.listViewTracks.Items)
listViewItem.Checked = !listViewItem.Checked;
}
private void btSelectAll_Click(object sender, EventArgs e)
{
this.EnableAll(true);
this.UpdateConvertButton();
}
private void btUnselectAll_Click(object sender, EventArgs e)
{
this.EnableAll(false);
this.UpdateConvertButton();
}
private void btInverseSelection_Click(object sender, EventArgs e)
{
this.InverseSelection();
this.UpdateConvertButton();
}
private void btConvertSelection_Click(object sender, EventArgs e)
{
this.selectedDiscTracks.Clear();
foreach (ListViewItem listViewItem in this.listViewTracks.Items)
{
if (listViewItem.Checked)
this.selectedDiscTracks.Add(listViewItem.Tag as IDiscTrack);
}
if (this.selectedDiscTracks.Count > 0)
this.DialogResult = DialogResult.OK;
else
this.DialogResult = DialogResult.None;
}
private void btClose_Click(object sender, EventArgs e) => this.DialogResult = DialogResult.Cancel;
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (FormGdda));
this.btConvertSelection = new Button();
this.groupBox = new GroupBox();
this.listViewTracks = new ListView();
this.columnHeader1 = new ColumnHeader();
this.columnHeader2 = new ColumnHeader();
this.btUnselectAll = new Button();
this.btInverseSelection = new Button();
this.btSelectAll = new Button();
this.btClose = new Button();
this.folderBrowserDialogForAudio = new FolderBrowserDialog();
this.saveFileDialogForAudio = new SaveFileDialog();
this.audioConversionSettingsViewer = new AudioConversionSettingsViewer();
this.groupBox.SuspendLayout();
this.SuspendLayout();
this.btConvertSelection.FlatStyle = FlatStyle.Popup;
this.btConvertSelection.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btConvertSelection.ForeColor = Color.FromArgb(248, 48, 0);
this.btConvertSelection.Location = new Point(248, 225);
this.btConvertSelection.Name = "btConvertSelection";
this.btConvertSelection.Size = new Size(108, 22);
this.btConvertSelection.TabIndex = 5;
this.btConvertSelection.Text = "Convert to CDDA";
this.btConvertSelection.UseVisualStyleBackColor = false;
this.btConvertSelection.Click += new EventHandler(this.btConvertSelection_Click);
this.groupBox.Controls.Add((Control) this.listViewTracks);
this.groupBox.Controls.Add((Control) this.btUnselectAll);
this.groupBox.Controls.Add((Control) this.btInverseSelection);
this.groupBox.Controls.Add((Control) this.btSelectAll);
this.groupBox.Location = new Point(12, 12);
this.groupBox.Name = "groupBox";
this.groupBox.Size = new Size(344, 183);
this.groupBox.TabIndex = 6;
this.groupBox.TabStop = false;
this.groupBox.Text = "Select GD-DA tracks to convert:";
this.listViewTracks.CheckBoxes = true;
this.listViewTracks.Columns.AddRange(new ColumnHeader[2]
{
this.columnHeader1,
this.columnHeader2
});
this.listViewTracks.FullRowSelect = true;
this.listViewTracks.HeaderStyle = ColumnHeaderStyle.None;
this.listViewTracks.HideSelection = false;
this.listViewTracks.Location = new Point(6, 47);
this.listViewTracks.MultiSelect = false;
this.listViewTracks.Name = "listViewTracks";
this.listViewTracks.ShowItemToolTips = true;
this.listViewTracks.Size = new Size(332, 130);
this.listViewTracks.TabIndex = 3;
this.listViewTracks.UseCompatibleStateImageBehavior = false;
this.listViewTracks.View = View.Details;
this.columnHeader1.Text = "";
this.columnHeader1.Width = 20;
this.columnHeader2.Text = "Track name";
this.columnHeader2.Width = 280;
this.btUnselectAll.FlatStyle = FlatStyle.Popup;
this.btUnselectAll.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btUnselectAll.ForeColor = Color.FromArgb(248, 48, 0);
this.btUnselectAll.Location = new Point(118, 19);
this.btUnselectAll.Name = "btUnselectAll";
this.btUnselectAll.Size = new Size(106, 22);
this.btUnselectAll.TabIndex = 1;
this.btUnselectAll.Text = "Unselect all";
this.btUnselectAll.UseVisualStyleBackColor = false;
this.btUnselectAll.Click += new EventHandler(this.btUnselectAll_Click);
this.btInverseSelection.FlatStyle = FlatStyle.Popup;
this.btInverseSelection.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btInverseSelection.ForeColor = Color.FromArgb(248, 48, 0);
this.btInverseSelection.Location = new Point(230, 19);
this.btInverseSelection.Name = "btInverseSelection";
this.btInverseSelection.Size = new Size(106, 22);
this.btInverseSelection.TabIndex = 2;
this.btInverseSelection.Text = "Inverse selection";
this.btInverseSelection.UseVisualStyleBackColor = false;
this.btInverseSelection.Click += new EventHandler(this.btInverseSelection_Click);
this.btSelectAll.FlatStyle = FlatStyle.Popup;
this.btSelectAll.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btSelectAll.ForeColor = Color.FromArgb(248, 48, 0);
this.btSelectAll.Location = new Point(6, 19);
this.btSelectAll.Name = "btSelectAll";
this.btSelectAll.Size = new Size(106, 22);
this.btSelectAll.TabIndex = 0;
this.btSelectAll.Text = "Select all";
this.btSelectAll.UseVisualStyleBackColor = false;
this.btSelectAll.Click += new EventHandler(this.btSelectAll_Click);
this.btClose.DialogResult = DialogResult.Cancel;
this.btClose.FlatStyle = FlatStyle.Popup;
this.btClose.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btClose.ForeColor = Color.FromArgb(248, 48, 0);
this.btClose.Location = new Point(12, 225);
this.btClose.Name = "btClose";
this.btClose.Size = new Size(108, 22);
this.btClose.TabIndex = 4;
this.btClose.Text = "Close";
this.btClose.UseVisualStyleBackColor = false;
this.btClose.Click += new EventHandler(this.btClose_Click);
this.audioConversionSettingsViewer.AutoSize = true;
this.audioConversionSettingsViewer.BackColor = Color.Transparent;
this.audioConversionSettingsViewer.Location = new Point(13, 201);
this.audioConversionSettingsViewer.Name = "audioConversionSettingsViewer";
this.audioConversionSettingsViewer.Size = new Size(343, 23);
this.audioConversionSettingsViewer.TabIndex = 7;
this.AcceptButton = (IButtonControl) this.btConvertSelection;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btClose;
this.ClientSize = new Size(368, 259);
this.Controls.Add((Control) this.audioConversionSettingsViewer);
this.Controls.Add((Control) this.btClose);
this.Controls.Add((Control) this.groupBox);
this.Controls.Add((Control) this.btConvertSelection);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon");
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormGdda);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Convert GD-DA to CD-DA";
this.Load += new EventHandler(this.frmGdda_Load);
this.groupBox.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,185 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormGetDESKey
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using SEGATools.Encrypt;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormGetDESKey : Form
{
private IContainer components;
private TextBox tbDESKey;
private Label lbDESKey;
private Button btProceed;
private Button btCancel;
public DESKey DESKey { get; private set; }
public static FormGetDESKey aGetDESKeyFormWithDecryptLabel() => new FormGetDESKey(FormGetDESKey.ButtonLabel.DecryptOnly, (DESKey) null);
public static FormGetDESKey aGetDESKeyFormWithEncryptLabel() => new FormGetDESKey(FormGetDESKey.ButtonLabel.EncryptOnly, (DESKey) null);
public static FormGetDESKey aGetDESKeyFormWithExtractAndDecryptLabel(
DESKey inputDESKey)
{
return new FormGetDESKey(FormGetDESKey.ButtonLabel.ExtractAndDecrypt, inputDESKey);
}
private FormGetDESKey()
: this(FormGetDESKey.ButtonLabel.ExtractAndDecrypt, (DESKey) null)
{
}
private FormGetDESKey(FormGetDESKey.ButtonLabel buttonLabel, DESKey suggestedDESKey)
{
string extractButtonLabel;
switch (buttonLabel)
{
case FormGetDESKey.ButtonLabel.ExtractAndDecrypt:
extractButtonLabel = Strings.DESKeyFormButtonLabelExtractAndDecrypt;
break;
case FormGetDESKey.ButtonLabel.EncryptOnly:
extractButtonLabel = Strings.DESKeyFormButtonLabelEncrypt;
break;
case FormGetDESKey.ButtonLabel.DecryptOnly:
extractButtonLabel = Strings.DESKeyFormButtonLabelDecrypt;
break;
default:
extractButtonLabel = Strings.DESKeyFormButtonLabelDecrypt;
break;
}
this.DESKey = suggestedDESKey;
this.Initialize(extractButtonLabel);
}
private void Initialize(string extractButtonLabel)
{
this.InitializeComponent();
this.Activated += new EventHandler(this.FormGetDESKey_Activated);
this.btProceed.Text = extractButtonLabel;
this.tbDESKey.CharacterCasing = CharacterCasing.Upper;
this.tbDESKey.TextChanged += new EventHandler(this.tbDESKey_TextChanged);
}
private void ValidateDESKey(string key)
{
string key1 = key.Trim();
if (DESKey.TryParse(key1))
{
this.DESKey = DESKey.Parse(key1);
this.btProceed.Enabled = true;
}
else
{
this.DESKey = (DESKey) null;
this.btProceed.Enabled = false;
}
}
private void FormGetDESKey_Load(object sender, EventArgs e)
{
this.btProceed.Enabled = false;
this.tbDESKey.Text = this.DESKey != null ? this.DESKey.KeyString : string.Empty;
this.tbDESKey.Focus();
}
private void FormGetDESKey_Activated(object sender, EventArgs e)
{
if (!Clipboard.ContainsText() || !DESKey.TryParse(Clipboard.GetText().Trim()))
return;
this.tbDESKey.Text = Clipboard.GetText().Trim();
}
private void tbDESKey_TextChanged(object sender, EventArgs e) => this.ValidateDESKey(this.tbDESKey.Text);
private void btProceed_Click(object sender, EventArgs e) => this.ValidateDESKey(this.tbDESKey.Text);
private void btCancel_Click(object sender, EventArgs e) => this.Close();
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.tbDESKey = new TextBox();
this.lbDESKey = new Label();
this.btProceed = new Button();
this.btCancel = new Button();
this.SuspendLayout();
this.tbDESKey.Location = new Point(71, 6);
this.tbDESKey.MaxLength = 16;
this.tbDESKey.Name = "tbDESKey";
this.tbDESKey.Size = new Size(210, 20);
this.tbDESKey.TabIndex = 0;
this.tbDESKey.TextAlign = HorizontalAlignment.Center;
this.lbDESKey.AutoSize = true;
this.lbDESKey.Location = new Point(12, 9);
this.lbDESKey.Name = "lbDESKey";
this.lbDESKey.Size = new Size(53, 13);
this.lbDESKey.TabIndex = 2;
this.lbDESKey.Text = "DES Key:";
this.btProceed.DialogResult = DialogResult.OK;
this.btProceed.FlatStyle = FlatStyle.Popup;
this.btProceed.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btProceed.ForeColor = Color.FromArgb(248, 48, 0);
this.btProceed.Location = new Point(154, 32);
this.btProceed.Name = "btProceed";
this.btProceed.Size = new Size((int) sbyte.MaxValue, 22);
this.btProceed.TabIndex = 1;
this.btProceed.Text = "&OK";
this.btProceed.UseVisualStyleBackColor = false;
this.btProceed.Click += new EventHandler(this.btProceed_Click);
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(15, 32);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size((int) sbyte.MaxValue, 22);
this.btCancel.TabIndex = 2;
this.btCancel.Text = "&Cancel";
this.btCancel.UseVisualStyleBackColor = false;
this.btCancel.Click += new EventHandler(this.btCancel_Click);
this.AcceptButton = (IButtonControl) this.btProceed;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.ClientSize = new Size(295, 65);
this.Controls.Add((Control) this.btCancel);
this.Controls.Add((Control) this.btProceed);
this.Controls.Add((Control) this.tbDESKey);
this.Controls.Add((Control) this.lbDESKey);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormGetDESKey);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Enter the Naomi DES key";
this.Load += new EventHandler(this.FormGetDESKey_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
private enum ButtonLabel : short
{
ExtractAndDecrypt,
EncryptOnly,
DecryptOnly,
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,203 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormInitialProgram
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using SEGATools.Security;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormInitialProgram : Form
{
private InitialProgramExtended ip;
private string basePath;
private IContainer components;
private Button btClose;
private TabControl tcInitialProgram;
private TabPage tpGeneralSettings;
private InitialProgramGeneralSettingsViewer ipGeneralSettingsViewer;
private TabPage tpPeripheralSettings;
private InitialProgramPeripheralsViewer ipPeriperalsViewer;
private TabPage tpMRImages;
private InitialProgramImagesViewer ipImagesViewer;
private TabPage tpLibraryReferences;
private TabPage tpTrackList;
private InitialProgramLibraryReferences ipLibraryReferences;
private InitialProgramTocViewer ipTocViewer;
public FormInitialProgram(InitialProgramExtended ip, string basePath)
{
this.InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
this.ip = ip;
this.basePath = basePath;
}
private void FormIp_Load(object sender, EventArgs e)
{
this.Text = "Initial Program Viewer: " + this.ip.FileName;
this.ipGeneralSettingsViewer.LoadInitialProgram(this.ip);
this.ipPeriperalsViewer.LoadInitialProgram(this.ip);
this.ipImagesViewer.LoadInitialProgram(this.ip, this.basePath);
this.ipLibraryReferences.LoadInitialProgram(this.ip);
this.ipTocViewer.LoadInitialProgram(this.ip);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.btClose = new Button();
this.tcInitialProgram = new TabControl();
this.tpGeneralSettings = new TabPage();
this.ipGeneralSettingsViewer = new InitialProgramGeneralSettingsViewer();
this.tpPeripheralSettings = new TabPage();
this.ipPeriperalsViewer = new InitialProgramPeripheralsViewer();
this.tpMRImages = new TabPage();
this.ipImagesViewer = new InitialProgramImagesViewer();
this.tpLibraryReferences = new TabPage();
this.ipLibraryReferences = new InitialProgramLibraryReferences();
this.tpTrackList = new TabPage();
this.ipTocViewer = new InitialProgramTocViewer();
this.tcInitialProgram.SuspendLayout();
this.tpGeneralSettings.SuspendLayout();
this.tpPeripheralSettings.SuspendLayout();
this.tpMRImages.SuspendLayout();
this.tpLibraryReferences.SuspendLayout();
this.tpTrackList.SuspendLayout();
this.SuspendLayout();
this.btClose.DialogResult = DialogResult.Cancel;
this.btClose.FlatStyle = FlatStyle.Popup;
this.btClose.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btClose.ForeColor = Color.FromArgb(248, 48, 0);
this.btClose.Location = new Point(378, 292);
this.btClose.Name = "btClose";
this.btClose.Size = new Size(108, 22);
this.btClose.TabIndex = 0;
this.btClose.Text = "Close";
this.btClose.UseVisualStyleBackColor = false;
this.tcInitialProgram.Controls.Add((Control) this.tpGeneralSettings);
this.tcInitialProgram.Controls.Add((Control) this.tpPeripheralSettings);
this.tcInitialProgram.Controls.Add((Control) this.tpMRImages);
this.tcInitialProgram.Controls.Add((Control) this.tpLibraryReferences);
this.tcInitialProgram.Controls.Add((Control) this.tpTrackList);
this.tcInitialProgram.Location = new Point(12, 12);
this.tcInitialProgram.Name = "tcInitialProgram";
this.tcInitialProgram.SelectedIndex = 0;
this.tcInitialProgram.Size = new Size(474, 274);
this.tcInitialProgram.TabIndex = 0;
this.tpGeneralSettings.BackColor = Color.Transparent;
this.tpGeneralSettings.Controls.Add((Control) this.ipGeneralSettingsViewer);
this.tpGeneralSettings.Cursor = Cursors.Default;
this.tpGeneralSettings.Location = new Point(4, 22);
this.tpGeneralSettings.Name = "tpGeneralSettings";
this.tpGeneralSettings.Padding = new Padding(3);
this.tpGeneralSettings.Size = new Size(466, 248);
this.tpGeneralSettings.TabIndex = 0;
this.tpGeneralSettings.Text = "General Settings";
this.tpGeneralSettings.UseVisualStyleBackColor = true;
this.ipGeneralSettingsViewer.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
this.ipGeneralSettingsViewer.AutoSize = true;
this.ipGeneralSettingsViewer.BackColor = Color.Transparent;
this.ipGeneralSettingsViewer.Location = new Point(3, 3);
this.ipGeneralSettingsViewer.Name = "ipGeneralSettingsViewer";
this.ipGeneralSettingsViewer.Size = new Size(460, 243);
this.ipGeneralSettingsViewer.TabIndex = 12;
this.tpPeripheralSettings.BackColor = Color.Transparent;
this.tpPeripheralSettings.Controls.Add((Control) this.ipPeriperalsViewer);
this.tpPeripheralSettings.Location = new Point(4, 22);
this.tpPeripheralSettings.Name = "tpPeripheralSettings";
this.tpPeripheralSettings.Padding = new Padding(3);
this.tpPeripheralSettings.Size = new Size(466, 248);
this.tpPeripheralSettings.TabIndex = 1;
this.tpPeripheralSettings.Text = "Peripheral Settings";
this.tpPeripheralSettings.UseVisualStyleBackColor = true;
this.ipPeriperalsViewer.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
this.ipPeriperalsViewer.AutoSize = true;
this.ipPeriperalsViewer.BackColor = Color.Transparent;
this.ipPeriperalsViewer.Location = new Point(3, 3);
this.ipPeriperalsViewer.Name = "ipPeriperalsViewer";
this.ipPeriperalsViewer.Size = new Size(463, 242);
this.ipPeriperalsViewer.TabIndex = 13;
this.tpMRImages.BackColor = Color.Transparent;
this.tpMRImages.Controls.Add((Control) this.ipImagesViewer);
this.tpMRImages.Location = new Point(4, 22);
this.tpMRImages.Name = "tpMRImages";
this.tpMRImages.Padding = new Padding(3);
this.tpMRImages.Size = new Size(466, 248);
this.tpMRImages.TabIndex = 2;
this.tpMRImages.Text = "MR Images";
this.tpMRImages.UseVisualStyleBackColor = true;
this.ipImagesViewer.BackColor = Color.Transparent;
this.ipImagesViewer.Location = new Point(0, 6);
this.ipImagesViewer.Name = "ipImagesViewer";
this.ipImagesViewer.Size = new Size(463, 239);
this.ipImagesViewer.TabIndex = 0;
this.tpLibraryReferences.BackColor = Color.Transparent;
this.tpLibraryReferences.Controls.Add((Control) this.ipLibraryReferences);
this.tpLibraryReferences.Location = new Point(4, 22);
this.tpLibraryReferences.Name = "tpLibraryReferences";
this.tpLibraryReferences.Padding = new Padding(3);
this.tpLibraryReferences.Size = new Size(466, 248);
this.tpLibraryReferences.TabIndex = 3;
this.tpLibraryReferences.Text = "Library References";
this.tpLibraryReferences.UseVisualStyleBackColor = true;
this.ipLibraryReferences.BackColor = Color.Transparent;
this.ipLibraryReferences.Dock = DockStyle.Fill;
this.ipLibraryReferences.Location = new Point(3, 3);
this.ipLibraryReferences.Name = "ipLibraryReferences";
this.ipLibraryReferences.Size = new Size(460, 242);
this.ipLibraryReferences.TabIndex = 0;
this.tpTrackList.Controls.Add((Control) this.ipTocViewer);
this.tpTrackList.Location = new Point(4, 22);
this.tpTrackList.Name = "tpTrackList";
this.tpTrackList.Padding = new Padding(3);
this.tpTrackList.Size = new Size(466, 248);
this.tpTrackList.TabIndex = 4;
this.tpTrackList.Text = "Track List";
this.tpTrackList.UseVisualStyleBackColor = true;
this.ipTocViewer.BackColor = Color.Transparent;
this.ipTocViewer.Dock = DockStyle.Fill;
this.ipTocViewer.Location = new Point(3, 3);
this.ipTocViewer.Name = "ipTocViewer";
this.ipTocViewer.Size = new Size(460, 242);
this.ipTocViewer.TabIndex = 0;
this.AcceptButton = (IButtonControl) this.btClose;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btClose;
this.ClientSize = new Size(497, 321);
this.Controls.Add((Control) this.tcInitialProgram);
this.Controls.Add((Control) this.btClose);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormInitialProgram);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "IP Viewer";
this.Load += new EventHandler(this.FormIp_Load);
this.tcInitialProgram.ResumeLayout(false);
this.tpGeneralSettings.ResumeLayout(false);
this.tpGeneralSettings.PerformLayout();
this.tpPeripheralSettings.ResumeLayout(false);
this.tpPeripheralSettings.PerformLayout();
this.tpMRImages.ResumeLayout(false);
this.tpLibraryReferences.ResumeLayout(false);
this.tpTrackList.ResumeLayout(false);
this.ResumeLayout(false);
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,70 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormLoading
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormLoading : Form
{
private IContainer components;
private Label lbLoadingMessage;
private ProgressBar progressBar;
public FormLoading(string Title, string Message)
{
this.InitializeComponent();
this.Text = Title;
this.lbLoadingMessage.Text = Message;
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.lbLoadingMessage = new Label();
this.progressBar = new ProgressBar();
this.SuspendLayout();
this.lbLoadingMessage.Anchor = AnchorStyles.None;
this.lbLoadingMessage.ImageAlign = ContentAlignment.TopCenter;
this.lbLoadingMessage.Location = new Point(12, 9);
this.lbLoadingMessage.Name = "lbLoadingMessage";
this.lbLoadingMessage.Size = new Size(320, 20);
this.lbLoadingMessage.TabIndex = 5;
this.lbLoadingMessage.Text = "Message";
this.lbLoadingMessage.TextAlign = ContentAlignment.MiddleLeft;
this.progressBar.Location = new Point(12, 32);
this.progressBar.MarqueeAnimationSpeed = 30;
this.progressBar.Name = "progressBar";
this.progressBar.Size = new Size(320, 23);
this.progressBar.Style = ProgressBarStyle.Marquee;
this.progressBar.TabIndex = 6;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.ClientSize = new Size(344, 62);
this.ControlBox = false;
this.Controls.Add((Control) this.progressBar);
this.Controls.Add((Control) this.lbLoadingMessage);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormLoading);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Title";
this.ResumeLayout(false);
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,81 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormPrimaryVolumeDescriptor
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.UserControls;
using ImageReader.ISO9660.VolumeDescriptors;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormPrimaryVolumeDescriptor : Form
{
private PrimaryVolumeDescriptor PrimaryVolumeDescriptor;
private IContainer components;
private Button btClose;
private PrimaryVolumeDescriptorViewer primaryVolumeDescriptorViewer;
public FormPrimaryVolumeDescriptor(PrimaryVolumeDescriptor PrimaryVolumeDescriptor)
{
this.InitializeComponent();
this.PrimaryVolumeDescriptor = PrimaryVolumeDescriptor;
}
private void FormInfo_Load(object sender, EventArgs e) => this.primaryVolumeDescriptorViewer.LoadPrimaryVolumeDescriptor(this.PrimaryVolumeDescriptor);
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (FormPrimaryVolumeDescriptor));
this.btClose = new Button();
this.primaryVolumeDescriptorViewer = new PrimaryVolumeDescriptorViewer();
this.SuspendLayout();
this.btClose.DialogResult = DialogResult.Cancel;
this.btClose.FlatStyle = FlatStyle.Popup;
this.btClose.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btClose.ForeColor = Color.FromArgb(248, 48, 0);
this.btClose.Location = new Point(466, 198);
this.btClose.Name = "btClose";
this.btClose.Size = new Size(108, 22);
this.btClose.TabIndex = 1;
this.btClose.Text = "Close";
this.btClose.UseVisualStyleBackColor = false;
this.primaryVolumeDescriptorViewer.AutoSize = true;
this.primaryVolumeDescriptorViewer.Location = new Point(5, 8);
this.primaryVolumeDescriptorViewer.Margin = new Padding(1);
this.primaryVolumeDescriptorViewer.Name = "primaryVolumeDescriptorViewer";
this.primaryVolumeDescriptorViewer.Size = new Size(571, 181);
this.primaryVolumeDescriptorViewer.TabIndex = 2;
this.AcceptButton = (IButtonControl) this.btClose;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btClose;
this.ClientSize = new Size(584, 226);
this.Controls.Add((Control) this.primaryVolumeDescriptorViewer);
this.Controls.Add((Control) this.btClose);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon");
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormPrimaryVolumeDescriptor);
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Primary Volume Descriptor Viewer";
this.Load += new EventHandler(this.FormInfo_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,423 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormProcess
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Others;
using GDRomExplorer.Resources;
using SEGATools.Audio;
using SEGATools.Disc;
using SEGATools.Encrypt;
using SEGATools.GDEmu;
using SEGATools.Scanner;
using SEGATools.UserProcess;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormProcess : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private UserProcessBase process;
private FormProcess.ProcessInfo processInfo;
private Guid currentConversionTaskId;
private ProgressBar progressBarUnique;
private Label progressBarLabelUnique;
private Point progressBarLabelUniqueInitialLocation;
private Size progressBarLabelUniqueInitialSize;
private bool NotifyAppStatusEvent;
private IContainer components;
private GroupBox groupBoxProgress;
private ProgressBar progressBarTotal;
private ProgressBar progressBarCurrent;
private Label lbOutputTitle;
private Label lbInputTitle;
private Button btCancel;
private Label lbOutput;
private Label lbInput;
private Label lbTotalPercentage;
private Label lbCurrentPercentage;
public static FormProcess createForDiscExtractor(
DiscExtractor discExtractor,
Guid TaskId)
{
FormProcess.ProcessInfo forDiscExtractor = FormProcess.ProcessInfo.GetProcessInfoForDiscExtractor();
return new FormProcess((UserProcessBase) discExtractor, forDiscExtractor, TaskId, true);
}
public static FormProcess createForRawToWavConverter(
Raw2WavConverter raw2WavConverter,
Guid TaskId)
{
FormProcess.ProcessInfo rawToWavConverter = FormProcess.ProcessInfo.GetProcessInfoForRawToWavConverter();
return new FormProcess((UserProcessBase) raw2WavConverter, rawToWavConverter, TaskId, true);
}
public static FormProcess createForDesEncryptor(
DesEncryptDecryptTool desDecryptor,
Guid TaskId)
{
FormProcess.ProcessInfo infoForDesEncryptor = FormProcess.ProcessInfo.GetProcessInfoForDesEncryptor();
return new FormProcess((UserProcessBase) desDecryptor, infoForDesEncryptor, TaskId, true);
}
public static FormProcess createForDesDecryptor(
DesEncryptDecryptTool desDecryptor,
Guid TaskId)
{
FormProcess.ProcessInfo infoForDesDecryptor = FormProcess.ProcessInfo.GetProcessInfoForDesDecryptor();
return new FormProcess((UserProcessBase) desDecryptor, infoForDesDecryptor, TaskId, true);
}
public static FormProcess createForFileScanner(FileScanner fileScanner, Guid TaskId)
{
FormProcess.ProcessInfo infoForFileScanner = FormProcess.ProcessInfo.GetProcessInfoForFileScanner();
return new FormProcess((UserProcessBase) fileScanner, infoForFileScanner, TaskId, true);
}
public static FormProcess createForGDEmuConverter(
GDEmuConverter gdEmuConverter,
Guid TaskId)
{
FormProcess.ProcessInfo forGdEmuConverter = FormProcess.ProcessInfo.GetProcessInfoForGDEmuConverter();
return new FormProcess((UserProcessBase) gdEmuConverter, forGdEmuConverter, TaskId, false);
}
private FormProcess(
UserProcessBase Process,
FormProcess.ProcessInfo ProcessInfo,
Guid TaskId,
bool NotifyAppStatusEvent)
{
this.InitializeComponent();
this.process = Process;
this.processInfo = ProcessInfo;
this.Text = this.processInfo.ProcessTitle;
this.groupBoxProgress.Text = this.processInfo.ProcessSubTitle + ":";
this.currentConversionTaskId = TaskId;
this.progressBarUnique = this.progressBarCurrent;
this.progressBarLabelUnique = this.lbCurrentPercentage;
this.progressBarLabelUniqueInitialLocation = this.progressBarLabelUnique.Location;
this.progressBarLabelUniqueInitialSize = this.progressBarUnique.Size;
this.NotifyAppStatusEvent = NotifyAppStatusEvent;
this.AddEventListeners();
}
private void AddEventListeners()
{
this.process.AsyncOperationProgressChanged += new AsyncOperationProgressChangedEventHandler(this.ProgressChanged);
this.process.AsyncOperationCompleted += new AsyncOperationCompletedEventHandler(this.ProcessCompleted);
this.process.AsyncOperationWaitForUserConsent += new AsyncOperationProgressWaitingForUserConsentEventHandler(this.ProcessWaitForUserConsent);
this.process.AsyncOperationUpdateUIView += new AsyncOperationProgressUpdateUIEventHandler(this.ProcessUpdateUIView);
}
private void RemoveEventListeners()
{
this.process.AsyncOperationProgressChanged -= new AsyncOperationProgressChangedEventHandler(this.ProgressChanged);
this.process.AsyncOperationCompleted -= new AsyncOperationCompletedEventHandler(this.ProcessCompleted);
this.process.AsyncOperationWaitForUserConsent -= new AsyncOperationProgressWaitingForUserConsentEventHandler(this.ProcessWaitForUserConsent);
this.process.AsyncOperationUpdateUIView -= new AsyncOperationProgressUpdateUIEventHandler(this.ProcessUpdateUIView);
}
private void UpdateProgressBar(
ProgressBar ProgressBar,
Label ProgressPercentage,
int Percentage)
{
if (Percentage == ProgressBar.Value)
return;
ProgressBar.Value = Percentage >= 100 ? 100 : Percentage;
ProgressPercentage.Text = ProgressBar.Value.ToString() + "%";
}
private void NotifyNewAppStatus(string message)
{
if (!this.NotifyAppStatusEvent)
return;
AppStatus.NotifyNewAppStatus(message);
}
private void UpdateProgressBarsWithInitialValues()
{
this.progressBarUnique.Size = this.progressBarLabelUniqueInitialSize;
this.progressBarLabelUnique.Location = this.progressBarLabelUniqueInitialLocation;
}
private void ResizeForOneProgressBarWithPercentage()
{
this.progressBarUnique.Height = this.progressBarTotal.Location.Y + this.progressBarTotal.Height - this.progressBarCurrent.Location.Y;
this.progressBarLabelUnique.Location = new Point(this.lbCurrentPercentage.Location.X, this.progressBarCurrent.Location.Y + (this.progressBarCurrent.Height - this.lbCurrentPercentage.Height) / 2);
}
private void ResizeForOneProgressBarWithoutPercentage()
{
this.ResizeForOneProgressBarWithPercentage();
this.progressBarUnique.Width = this.lbTotalPercentage.Location.X + this.lbTotalPercentage.Width - this.progressBarTotal.Location.X;
}
private void UpdateInputTitleAndText(string newTitle, bool showText)
{
this.lbInputTitle.Text = newTitle;
this.lbInput.Visible = showText;
}
private void ProgressChanged(UserProcessProgressChangedEventArgs e)
{
if (!this.Visible)
{
int num = (int) this.ShowDialog();
}
this.UpdateProgressBar(this.progressBarCurrent, this.lbCurrentPercentage, e.ProgressPercentage);
this.UpdateProgressBar(this.progressBarTotal, this.lbTotalPercentage, e.TotalProgressPercentage);
this.lbInput.Text = e.Input;
this.lbOutput.Text = e.Output;
this.Update();
}
private void ProcessCompleted(object sender, UserProcessCompletedEventArgs e)
{
if (e.Error != null)
{
string str = string.Format("{0} error with \"{1}\":\n{2}", (object) this.processInfo.ProcessTypeName, (object) e.ResourceName, (object) e.Error.Message);
FormProcess.logger.Error((object) str);
int num = (int) MessageBox.Show((IWin32Window) this, str, this.processInfo.ProcessTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
this.NotifyNewAppStatus(str);
}
else if (e.Cancelled)
{
string message = string.Format("{0} canceled!", (object) this.processInfo.ProcessTypeName);
FormProcess.logger.Info((object) message);
this.NotifyNewAppStatus(message);
}
else
{
this.UpdateProgressBar(this.progressBarCurrent, this.lbCurrentPercentage, 100);
this.UpdateProgressBar(this.progressBarTotal, this.lbTotalPercentage, 100);
string message = string.Format("{0} successfully completed!", (object) this.processInfo.ProcessTypeName);
FormProcess.logger.Info((object) message);
this.NotifyNewAppStatus(message);
}
this.RemoveEventListeners();
this.Close();
}
private void ProcessWaitForUserConsent(UserProcessWaitingForUserConsentEventArgs e)
{
string caption = Strings.ResourceManager.GetString(e.QuestionTitleResourceName);
if (MessageBox.Show((IWin32Window) this, UserProcessEventArgsConverter.ToFormatedString(e, Strings.ResourceManager), caption, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) != DialogResult.Yes)
this.process.CancelAsync((object) this.currentConversionTaskId);
e.ResetEvent.Set();
}
private void ProcessUpdateUIView(UserProcessUpdateUIViewEventArgs e)
{
this.UpdateProgressBarsWithInitialValues();
switch (e.UIStyle)
{
case UserProcessUpdateUIViewEventArgs.UserProgressUIStyle.OneProgressBarWithPercentage:
this.progressBarTotal.Visible = false;
this.lbTotalPercentage.Visible = false;
this.progressBarCurrent.Visible = true;
this.lbCurrentPercentage.Visible = true;
this.progressBarCurrent.Style = ProgressBarStyle.Continuous;
this.ResizeForOneProgressBarWithPercentage();
break;
case UserProcessUpdateUIViewEventArgs.UserProgressUIStyle.OneProgressBarWithoutPercentage:
this.progressBarTotal.Visible = false;
this.lbTotalPercentage.Visible = false;
this.progressBarCurrent.Visible = true;
this.lbCurrentPercentage.Visible = false;
this.progressBarCurrent.Style = ProgressBarStyle.Marquee;
this.ResizeForOneProgressBarWithoutPercentage();
break;
case UserProcessUpdateUIViewEventArgs.UserProgressUIStyle.TwoProgressBarsWithPercentage:
this.progressBarTotal.Visible = true;
this.lbTotalPercentage.Visible = true;
this.progressBarCurrent.Visible = true;
this.lbCurrentPercentage.Visible = true;
this.progressBarTotal.Style = ProgressBarStyle.Continuous;
this.progressBarCurrent.Style = ProgressBarStyle.Continuous;
break;
}
if (!e.UpdateInputTitle)
return;
this.UpdateInputTitleAndText(Strings.ResourceManager.GetString(e.InputTitleResourceName), e.ShowInputText);
}
private void btCancel_Click(object sender, EventArgs e) => this.process.CancelAsync((object) this.currentConversionTaskId);
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (FormProcess));
this.groupBoxProgress = new GroupBox();
this.lbCurrentPercentage = new Label();
this.lbTotalPercentage = new Label();
this.lbOutput = new Label();
this.lbInput = new Label();
this.btCancel = new Button();
this.progressBarTotal = new ProgressBar();
this.progressBarCurrent = new ProgressBar();
this.lbOutputTitle = new Label();
this.lbInputTitle = new Label();
this.groupBoxProgress.SuspendLayout();
this.SuspendLayout();
this.groupBoxProgress.Controls.Add((Control) this.lbOutputTitle);
this.groupBoxProgress.Controls.Add((Control) this.lbInputTitle);
this.groupBoxProgress.Controls.Add((Control) this.lbCurrentPercentage);
this.groupBoxProgress.Controls.Add((Control) this.lbTotalPercentage);
this.groupBoxProgress.Controls.Add((Control) this.lbOutput);
this.groupBoxProgress.Controls.Add((Control) this.lbInput);
this.groupBoxProgress.Controls.Add((Control) this.btCancel);
this.groupBoxProgress.Controls.Add((Control) this.progressBarTotal);
this.groupBoxProgress.Controls.Add((Control) this.progressBarCurrent);
this.groupBoxProgress.Location = new Point(12, 12);
this.groupBoxProgress.Name = "groupBoxProgress";
this.groupBoxProgress.Size = new Size(421, 137);
this.groupBoxProgress.TabIndex = 9;
this.groupBoxProgress.TabStop = false;
this.groupBoxProgress.Text = "ProgressSubTitle";
this.lbCurrentPercentage.AutoSize = true;
this.lbCurrentPercentage.BackColor = Color.Transparent;
this.lbCurrentPercentage.Font = new Font("Microsoft Sans Serif", 9.75f, FontStyle.Bold, GraphicsUnit.Point, (byte) 0);
this.lbCurrentPercentage.ImageAlign = ContentAlignment.MiddleRight;
this.lbCurrentPercentage.Location = new Point(370, 66);
this.lbCurrentPercentage.Name = "lbCurrentPercentage";
this.lbCurrentPercentage.Size = new Size(45, 16);
this.lbCurrentPercentage.TabIndex = 9;
this.lbCurrentPercentage.Text = "100%";
this.lbCurrentPercentage.TextAlign = ContentAlignment.MiddleRight;
this.lbTotalPercentage.AutoSize = true;
this.lbTotalPercentage.BackColor = Color.Transparent;
this.lbTotalPercentage.Font = new Font("Microsoft Sans Serif", 9.75f, FontStyle.Bold, GraphicsUnit.Point, (byte) 0);
this.lbTotalPercentage.ImageAlign = ContentAlignment.MiddleRight;
this.lbTotalPercentage.Location = new Point(370, 87);
this.lbTotalPercentage.Name = "lbTotalPercentage";
this.lbTotalPercentage.Size = new Size(45, 16);
this.lbTotalPercentage.TabIndex = 10;
this.lbTotalPercentage.Text = "100%";
this.lbTotalPercentage.TextAlign = ContentAlignment.MiddleRight;
this.lbOutput.AutoEllipsis = true;
this.lbOutput.Location = new Point(51, 43);
this.lbOutput.Name = "lbOutput";
this.lbOutput.Size = new Size(358, 14);
this.lbOutput.TabIndex = 8;
this.lbInput.AutoEllipsis = true;
this.lbInput.Location = new Point(51, 20);
this.lbInput.Name = "lbInput";
this.lbInput.Size = new Size(358, 14);
this.lbInput.TabIndex = 7;
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(156, 108);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size(108, 22);
this.btCancel.TabIndex = 6;
this.btCancel.Text = "Cancel";
this.btCancel.UseVisualStyleBackColor = false;
this.btCancel.Click += new EventHandler(this.btCancel_Click);
this.progressBarTotal.Location = new Point(8, 87);
this.progressBarTotal.Name = "progressBarTotal";
this.progressBarTotal.Size = new Size(356, 15);
this.progressBarTotal.TabIndex = 4;
this.progressBarCurrent.Location = new Point(8, 66);
this.progressBarCurrent.Name = "progressBarCurrent";
this.progressBarCurrent.Size = new Size(356, 15);
this.progressBarCurrent.TabIndex = 3;
this.lbOutputTitle.AutoSize = true;
this.lbOutputTitle.Location = new Point(6, 43);
this.lbOutputTitle.Name = "lbOutputTitle";
this.lbOutputTitle.Size = new Size(42, 13);
this.lbOutputTitle.TabIndex = 1;
this.lbOutputTitle.Text = "Output:";
this.lbInputTitle.AutoSize = true;
this.lbInputTitle.Location = new Point(6, 20);
this.lbInputTitle.Name = "lbInputTitle";
this.lbInputTitle.Size = new Size(34, 13);
this.lbInputTitle.TabIndex = 0;
this.lbInputTitle.Text = "Input:";
this.lbInputTitle.TextAlign = ContentAlignment.MiddleLeft;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.ClientSize = new Size(445, 161);
this.ControlBox = false;
this.Controls.Add((Control) this.groupBoxProgress);
this.DoubleBuffered = true;
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon");
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormProcess);
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "ProcessTitle";
this.groupBoxProgress.ResumeLayout(false);
this.groupBoxProgress.PerformLayout();
this.ResumeLayout(false);
}
internal class ProcessInfo
{
internal string ProcessTitle;
internal string ProcessSubTitle;
internal string ProcessTypeName;
internal static FormProcess.ProcessInfo GetProcessInfoForDesEncryptor() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.DESEncryptorTitle,
ProcessSubTitle = Strings.DESEncryptorSubTitle,
ProcessTypeName = Strings.DESEncryptorTypeName
};
internal static FormProcess.ProcessInfo GetProcessInfoForDesDecryptor() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.DESDecryptorTitle,
ProcessSubTitle = Strings.DESDecryptorSubTitle,
ProcessTypeName = Strings.DESDescriptorTypeName
};
internal static FormProcess.ProcessInfo GetProcessInfoForFileScanner() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.FileScannerTitle,
ProcessSubTitle = Strings.FileScannerSubTitle,
ProcessTypeName = Strings.FileScannerTypeName
};
internal static FormProcess.ProcessInfo GetProcessInfoForDiscExtractor() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.FileExtractorTitle,
ProcessSubTitle = Strings.FileExtractorSubTitle,
ProcessTypeName = Strings.FileExtractorTypeName
};
internal static FormProcess.ProcessInfo GetProcessInfoForRawToWavConverter() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.Raw2WavConverterTitle,
ProcessSubTitle = Strings.Raw2WavConverterSubTitle,
ProcessTypeName = Strings.Raw2WavConverterTypeName
};
internal static FormProcess.ProcessInfo GetProcessInfoForGDEmuConverter() => new FormProcess.ProcessInfo()
{
ProcessTitle = Strings.GDEmuExporterTitle,
ProcessSubTitle = Strings.GDEmuExporterSubTitle,
ProcessTypeName = Strings.GDEmuExporterTypeName
};
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,363 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormSettings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Properties;
using GDRomExplorer.Resources;
using SEGATools.Disc;
using SEGATools.FileFormat;
using SEGATools.Registry;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormSettings : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private readonly List<FormSettings.CheckedListBoxItem> initialFileExtensions;
private IContainer components;
private TableLayoutPanel tableLayoutPanel;
private Button btSaveClose;
private Button btCancel;
private TabControl tabControl;
private TabPage tpAppSettings;
private TabPage tpImageReaderSettings;
private DiscFormatProvider discFormatProvider;
private GroupBox gbFileExtensions;
private CheckedListBox checkedListBox;
private FlowLayoutPanel flowLayoutPanel;
private LinkLabel lbCheckAll;
private LinkLabel lbSelectNone;
private TableLayoutPanel tableLayoutPanelImageReading;
private GroupBox gbImageReaderOptions;
private CheckBox cbComputePathTable;
private Label lbInfoPathTable;
public FormSettings()
{
this.InitializeComponent();
this.initialFileExtensions = new List<FormSettings.CheckedListBoxItem>();
this.FillFileAssociationList();
this.cbComputePathTable.Checked = Settings.Default.ImageReaderComputePathTable;
this.lbInfoPathTable.Text = Strings.SettingsInfoPathTable;
}
private string GetFileAssociationInfoName(string FileExtension) => "GDRomExplorer" + FileExtension;
private void FillFileAssociationList()
{
this.checkedListBox.Items.Clear();
foreach (IImageFileFormat ImageFileFormat in this.discFormatProvider.SupportedFileFormat)
{
for (int index = 0; index < ImageFileFormat.FileExtentions.Length; ++index)
{
string fileExtention = ImageFileFormat.FileExtentions[index];
string extentionDescription = ImageFileFormat.FileExtentionDescriptions[index];
bool application = this.IsExtensionAssociatedToApplication(fileExtention);
FormSettings.CheckedListBoxItem checkedListBoxItem = new FormSettings.CheckedListBoxItem(fileExtention, extentionDescription, ImageFileFormat);
if (application)
this.initialFileExtensions.Add(checkedListBoxItem);
this.checkedListBox.Items.Add((object) checkedListBoxItem, application);
}
}
}
private bool IsExtensionAssociatedToApplication(string fileExtension)
{
FileAssociationInfo fileAssociationInfo = new FileAssociationInfo(fileExtension);
return fileAssociationInfo.Exists && fileAssociationInfo.ProgID.Equals(this.GetFileAssociationInfoName(fileExtension));
}
private void AddFileAssociation(FormSettings.CheckedListBoxItem item)
{
FileAssociationInfo fileAssociationInfo = new FileAssociationInfo(item.FileExtension);
fileAssociationInfo.Create(this.GetFileAssociationInfoName(item.FileExtension));
string fullPath = Path.GetFullPath(Environment.GetCommandLineArgs()[0]);
ProgramAssociationInfo programAssociationInfo = new ProgramAssociationInfo(fileAssociationInfo.ProgID);
programAssociationInfo.Create(item.FileDescription, new ProgramVerb("Open", fullPath + " \"%1\""));
string path = fullPath;
programAssociationInfo.DefaultIcon = new ProgramIcon(path, 1);
}
private void RemoveFileAssociation(string fileExtension)
{
FileAssociationInfo fileAssociationInfo = new FileAssociationInfo(fileExtension);
if (!this.IsExtensionAssociatedToApplication(fileExtension))
return;
ProgramAssociationInfo programAssociationInfo = new ProgramAssociationInfo(fileAssociationInfo.ProgID);
if (programAssociationInfo.Exists)
programAssociationInfo.Delete();
fileAssociationInfo.Delete();
}
private void UpdateFileExtensions()
{
FormSettings.logger.Info((object) "Updating file extensions");
foreach (FormSettings.CheckedListBoxItem checkedListBoxItem in (ListBox.ObjectCollection) this.checkedListBox.Items)
{
bool flag1 = this.initialFileExtensions.Contains(checkedListBoxItem);
bool flag2 = this.checkedListBox.CheckedItems.Contains((object) checkedListBoxItem);
if (!flag1 && flag2)
this.AddFileAssociation(checkedListBoxItem);
if (flag1 && !flag2)
this.RemoveFileAssociation(checkedListBoxItem.FileExtension);
}
}
private void UpdateImageReaderSettings()
{
FormSettings.logger.Info((object) "Updating image reader settings");
Settings.Default.ImageReaderComputePathTable = this.cbComputePathTable.Checked;
}
private void btSaveClose_Click(object sender, EventArgs e)
{
this.UpdateFileExtensions();
this.UpdateImageReaderSettings();
AppStatus.NotifyNewAppStatus(Strings.SettingsSaved);
}
private void lbSelectNone_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
for (int index = 0; index < this.checkedListBox.Items.Count; ++index)
this.checkedListBox.SetItemChecked(index, false);
}
private void lbCheckAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
for (int index = 0; index < this.checkedListBox.Items.Count; ++index)
this.checkedListBox.SetItemChecked(index, true);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.tableLayoutPanel = new TableLayoutPanel();
this.btCancel = new Button();
this.btSaveClose = new Button();
this.tabControl = new TabControl();
this.tpAppSettings = new TabPage();
this.gbFileExtensions = new GroupBox();
this.flowLayoutPanel = new FlowLayoutPanel();
this.lbCheckAll = new LinkLabel();
this.lbSelectNone = new LinkLabel();
this.checkedListBox = new CheckedListBox();
this.tpImageReaderSettings = new TabPage();
this.tableLayoutPanelImageReading = new TableLayoutPanel();
this.gbImageReaderOptions = new GroupBox();
this.lbInfoPathTable = new Label();
this.cbComputePathTable = new CheckBox();
this.discFormatProvider = new DiscFormatProvider();
this.tableLayoutPanel.SuspendLayout();
this.tabControl.SuspendLayout();
this.tpAppSettings.SuspendLayout();
this.gbFileExtensions.SuspendLayout();
this.flowLayoutPanel.SuspendLayout();
this.tpImageReaderSettings.SuspendLayout();
this.tableLayoutPanelImageReading.SuspendLayout();
this.gbImageReaderOptions.SuspendLayout();
this.SuspendLayout();
this.tableLayoutPanel.ColumnCount = 2;
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50f));
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50f));
this.tableLayoutPanel.Controls.Add((Control) this.btCancel, 0, 1);
this.tableLayoutPanel.Controls.Add((Control) this.btSaveClose, 1, 1);
this.tableLayoutPanel.Controls.Add((Control) this.tabControl, 0, 0);
this.tableLayoutPanel.Dock = DockStyle.Fill;
this.tableLayoutPanel.Location = new Point(0, 0);
this.tableLayoutPanel.Name = "tableLayoutPanel";
this.tableLayoutPanel.RowCount = 2;
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 89.3617f));
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 10.6383f));
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 20f));
this.tableLayoutPanel.Size = new Size(271, 235);
this.tableLayoutPanel.TabIndex = 0;
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.Dock = DockStyle.Fill;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(3, 212);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size(129, 20);
this.btCancel.TabIndex = 11;
this.btCancel.Text = "&Cancel";
this.btCancel.UseVisualStyleBackColor = false;
this.btSaveClose.DialogResult = DialogResult.Cancel;
this.btSaveClose.Dock = DockStyle.Fill;
this.btSaveClose.FlatStyle = FlatStyle.Popup;
this.btSaveClose.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btSaveClose.ForeColor = Color.FromArgb(248, 48, 0);
this.btSaveClose.Location = new Point(138, 212);
this.btSaveClose.Name = "btSaveClose";
this.btSaveClose.Size = new Size(130, 20);
this.btSaveClose.TabIndex = 10;
this.btSaveClose.Text = "&OK";
this.btSaveClose.UseVisualStyleBackColor = false;
this.btSaveClose.Click += new EventHandler(this.btSaveClose_Click);
this.tableLayoutPanel.SetColumnSpan((Control) this.tabControl, 2);
this.tabControl.Controls.Add((Control) this.tpAppSettings);
this.tabControl.Controls.Add((Control) this.tpImageReaderSettings);
this.tabControl.Dock = DockStyle.Fill;
this.tabControl.Location = new Point(3, 3);
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
this.tabControl.Size = new Size(265, 203);
this.tabControl.TabIndex = 12;
this.tpAppSettings.BackColor = SystemColors.Window;
this.tpAppSettings.Controls.Add((Control) this.gbFileExtensions);
this.tpAppSettings.Location = new Point(4, 22);
this.tpAppSettings.Name = "tpAppSettings";
this.tpAppSettings.Padding = new Padding(3);
this.tpAppSettings.Size = new Size(257, 177);
this.tpAppSettings.TabIndex = 0;
this.tpAppSettings.Text = "General";
this.gbFileExtensions.BackColor = SystemColors.Window;
this.gbFileExtensions.Controls.Add((Control) this.flowLayoutPanel);
this.gbFileExtensions.Controls.Add((Control) this.checkedListBox);
this.gbFileExtensions.Dock = DockStyle.Top;
this.gbFileExtensions.Location = new Point(3, 3);
this.gbFileExtensions.Name = "gbFileExtensions";
this.gbFileExtensions.Size = new Size(251, 167);
this.gbFileExtensions.TabIndex = 1;
this.gbFileExtensions.TabStop = false;
this.gbFileExtensions.Text = "File Extensions:";
this.flowLayoutPanel.Controls.Add((Control) this.lbCheckAll);
this.flowLayoutPanel.Controls.Add((Control) this.lbSelectNone);
this.flowLayoutPanel.Dock = DockStyle.Bottom;
this.flowLayoutPanel.Location = new Point(3, 147);
this.flowLayoutPanel.Name = "flowLayoutPanel";
this.flowLayoutPanel.Size = new Size(245, 17);
this.flowLayoutPanel.TabIndex = 3;
this.lbCheckAll.AutoSize = true;
this.lbCheckAll.Dock = DockStyle.Bottom;
this.lbCheckAll.Location = new Point(3, 0);
this.lbCheckAll.Name = "lbCheckAll";
this.lbCheckAll.Size = new Size(48, 13);
this.lbCheckAll.TabIndex = 6;
this.lbCheckAll.TabStop = true;
this.lbCheckAll.Text = "select all";
this.lbCheckAll.LinkClicked += new LinkLabelLinkClickedEventHandler(this.lbCheckAll_LinkClicked);
this.lbSelectNone.AutoSize = true;
this.lbSelectNone.Dock = DockStyle.Bottom;
this.lbSelectNone.Location = new Point(57, 0);
this.lbSelectNone.Name = "lbSelectNone";
this.lbSelectNone.Size = new Size(62, 13);
this.lbSelectNone.TabIndex = 7;
this.lbSelectNone.TabStop = true;
this.lbSelectNone.Text = "select none";
this.lbSelectNone.LinkClicked += new LinkLabelLinkClickedEventHandler(this.lbSelectNone_LinkClicked);
this.checkedListBox.CheckOnClick = true;
this.checkedListBox.Dock = DockStyle.Top;
this.checkedListBox.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.checkedListBox.FormattingEnabled = true;
this.checkedListBox.Location = new Point(3, 16);
this.checkedListBox.Name = "checkedListBox";
this.checkedListBox.Size = new Size(245, 124);
this.checkedListBox.Sorted = true;
this.checkedListBox.TabIndex = 1;
this.tpImageReaderSettings.BackColor = SystemColors.Window;
this.tpImageReaderSettings.Controls.Add((Control) this.tableLayoutPanelImageReading);
this.tpImageReaderSettings.Location = new Point(4, 22);
this.tpImageReaderSettings.Name = "tpImageReaderSettings";
this.tpImageReaderSettings.Padding = new Padding(3);
this.tpImageReaderSettings.Size = new Size(257, 177);
this.tpImageReaderSettings.TabIndex = 1;
this.tpImageReaderSettings.Text = "Image Reading";
this.tableLayoutPanelImageReading.BackColor = Color.Transparent;
this.tableLayoutPanelImageReading.ColumnCount = 1;
this.tableLayoutPanelImageReading.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50f));
this.tableLayoutPanelImageReading.Controls.Add((Control) this.gbImageReaderOptions, 0, 0);
this.tableLayoutPanelImageReading.Dock = DockStyle.Fill;
this.tableLayoutPanelImageReading.Location = new Point(3, 3);
this.tableLayoutPanelImageReading.Name = "tableLayoutPanelImageReading";
this.tableLayoutPanelImageReading.RowCount = 1;
this.tableLayoutPanelImageReading.RowStyles.Add(new RowStyle(SizeType.Percent, 50f));
this.tableLayoutPanelImageReading.Size = new Size(251, 171);
this.tableLayoutPanelImageReading.TabIndex = 0;
this.gbImageReaderOptions.Controls.Add((Control) this.lbInfoPathTable);
this.gbImageReaderOptions.Controls.Add((Control) this.cbComputePathTable);
this.gbImageReaderOptions.Dock = DockStyle.Top;
this.gbImageReaderOptions.Location = new Point(3, 3);
this.gbImageReaderOptions.Name = "gbImageReaderOptions";
this.gbImageReaderOptions.Size = new Size(245, 90);
this.gbImageReaderOptions.TabIndex = 0;
this.gbImageReaderOptions.TabStop = false;
this.gbImageReaderOptions.Text = "ISO9660 File System:";
this.lbInfoPathTable.Dock = DockStyle.Bottom;
this.lbInfoPathTable.Location = new Point(3, 40);
this.lbInfoPathTable.Name = "lbInfoPathTable";
this.lbInfoPathTable.Size = new Size(239, 47);
this.lbInfoPathTable.TabIndex = 1;
this.lbInfoPathTable.Text = "Info path table";
this.cbComputePathTable.AutoSize = true;
this.cbComputePathTable.Location = new Point(7, 20);
this.cbComputePathTable.Name = "cbComputePathTable";
this.cbComputePathTable.Size = new Size(118, 17);
this.cbComputePathTable.TabIndex = 0;
this.cbComputePathTable.Text = "Compute path table";
this.cbComputePathTable.UseVisualStyleBackColor = true;
this.AcceptButton = (IButtonControl) this.btSaveClose;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.ClientSize = new Size(271, 235);
this.Controls.Add((Control) this.tableLayoutPanel);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormSettings);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Settings";
this.tableLayoutPanel.ResumeLayout(false);
this.tabControl.ResumeLayout(false);
this.tpAppSettings.ResumeLayout(false);
this.gbFileExtensions.ResumeLayout(false);
this.flowLayoutPanel.ResumeLayout(false);
this.flowLayoutPanel.PerformLayout();
this.tpImageReaderSettings.ResumeLayout(false);
this.tableLayoutPanelImageReading.ResumeLayout(false);
this.gbImageReaderOptions.ResumeLayout(false);
this.gbImageReaderOptions.PerformLayout();
this.ResumeLayout(false);
}
private class CheckedListBoxItem
{
public string FileExtension { get; private set; }
public string FileDescription { get; private set; }
public IImageFileFormat ImageFileFormat { get; private set; }
internal CheckedListBoxItem(
string FileExtension,
string FileDescription,
IImageFileFormat ImageFileFormat)
{
this.FileExtension = FileExtension;
this.FileDescription = FileDescription;
this.ImageFileFormat = ImageFileFormat;
}
public override string ToString() => string.Format("*{0} - {1}", (object) this.FileExtension.ToUpper(CultureInfo.InvariantCulture), (object) this.FileDescription);
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,158 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.FormSortFileOptions
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.Forms
{
public class FormSortFileOptions : Form
{
protected static string DEFAULT_PREFIX = "data\\";
protected static int DEFAULT_LOWEST_FILE_WEIGHT = 0;
private IContainer components;
private TextBox tbPathPrefix;
private Label lbDESKey;
private Button btGenerateSortFile;
private Button btCancel;
private Label lbLowestFileWeight;
private Label lbInfoSortFile;
private NumericUpDown nudFileWeight;
public string PathPrefix { get; private set; }
public int LowestFileWeight { get; private set; }
public FormSortFileOptions()
{
this.InitializeComponent();
this.PathPrefix = FormSortFileOptions.DEFAULT_PREFIX;
this.LowestFileWeight = FormSortFileOptions.DEFAULT_LOWEST_FILE_WEIGHT;
}
private void btCancel_Click(object sender, EventArgs e) => this.Close();
private void FormGetSortTxtPrefix_Load(object sender, EventArgs e)
{
this.lbInfoSortFile.Text = Strings.SortFileOptionsHint;
this.nudFileWeight.Value = (Decimal) this.LowestFileWeight;
this.tbPathPrefix.Text = this.PathPrefix;
this.tbPathPrefix.Focus();
}
private void btGenerateSortFile_Click(object sender, EventArgs e)
{
this.PathPrefix = this.tbPathPrefix.Text;
this.LowestFileWeight = Convert.ToInt32(this.nudFileWeight.Value);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.tbPathPrefix = new TextBox();
this.lbDESKey = new Label();
this.btGenerateSortFile = new Button();
this.btCancel = new Button();
this.lbLowestFileWeight = new Label();
this.lbInfoSortFile = new Label();
this.nudFileWeight = new NumericUpDown();
this.nudFileWeight.BeginInit();
this.SuspendLayout();
this.tbPathPrefix.Location = new Point(78, 6);
this.tbPathPrefix.MaxLength = 0;
this.tbPathPrefix.Name = "tbPathPrefix";
this.tbPathPrefix.Size = new Size(130, 20);
this.tbPathPrefix.TabIndex = 0;
this.tbPathPrefix.Text = "data\\";
this.lbDESKey.AutoSize = true;
this.lbDESKey.Location = new Point(12, 9);
this.lbDESKey.Name = "lbDESKey";
this.lbDESKey.Size = new Size(60, 13);
this.lbDESKey.TabIndex = 2;
this.lbDESKey.Text = "Path prefix:";
this.btGenerateSortFile.DialogResult = DialogResult.OK;
this.btGenerateSortFile.FlatStyle = FlatStyle.Popup;
this.btGenerateSortFile.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btGenerateSortFile.ForeColor = Color.FromArgb(248, 48, 0);
this.btGenerateSortFile.Location = new Point(250, 102);
this.btGenerateSortFile.Name = "btGenerateSortFile";
this.btGenerateSortFile.Size = new Size((int) sbyte.MaxValue, 22);
this.btGenerateSortFile.TabIndex = 1;
this.btGenerateSortFile.Text = "&Generate sort file";
this.btGenerateSortFile.UseVisualStyleBackColor = false;
this.btGenerateSortFile.Click += new EventHandler(this.btGenerateSortFile_Click);
this.btCancel.DialogResult = DialogResult.Cancel;
this.btCancel.FlatStyle = FlatStyle.Popup;
this.btCancel.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btCancel.ForeColor = Color.FromArgb(248, 48, 0);
this.btCancel.Location = new Point(15, 102);
this.btCancel.Name = "btCancel";
this.btCancel.Size = new Size((int) sbyte.MaxValue, 22);
this.btCancel.TabIndex = 2;
this.btCancel.Text = "&Cancel";
this.btCancel.UseVisualStyleBackColor = false;
this.btCancel.Click += new EventHandler(this.btCancel_Click);
this.lbLowestFileWeight.AutoSize = true;
this.lbLowestFileWeight.Location = new Point(214, 9);
this.lbLowestFileWeight.Name = "lbLowestFileWeight";
this.lbLowestFileWeight.Size = new Size(94, 13);
this.lbLowestFileWeight.TabIndex = 3;
this.lbLowestFileWeight.Text = "Lowest file weight:";
this.lbInfoSortFile.Location = new Point(12, 35);
this.lbInfoSortFile.Name = "lbInfoSortFile";
this.lbInfoSortFile.Size = new Size(364, 64);
this.lbInfoSortFile.TabIndex = 0;
this.lbInfoSortFile.Text = "Info sort file";
this.nudFileWeight.Location = new Point(316, 7);
this.nudFileWeight.Maximum = new Decimal(new int[4]
{
int.MaxValue,
0,
0,
0
});
this.nudFileWeight.Name = "nudFileWeight";
this.nudFileWeight.Size = new Size(60, 20);
this.nudFileWeight.TabIndex = 1;
this.nudFileWeight.TextAlign = HorizontalAlignment.Center;
this.nudFileWeight.ThousandsSeparator = true;
this.AcceptButton = (IButtonControl) this.btGenerateSortFile;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = SystemColors.Window;
this.CancelButton = (IButtonControl) this.btCancel;
this.ClientSize = new Size(389, 136);
this.Controls.Add((Control) this.nudFileWeight);
this.Controls.Add((Control) this.lbInfoSortFile);
this.Controls.Add((Control) this.lbLowestFileWeight);
this.Controls.Add((Control) this.btCancel);
this.Controls.Add((Control) this.btGenerateSortFile);
this.Controls.Add((Control) this.tbPathPrefix);
this.Controls.Add((Control) this.lbDESKey);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = nameof (FormSortFileOptions);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "Sort file options:";
this.Load += new EventHandler(this.FormGetSortTxtPrefix_Load);
this.nudFileWeight.EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,446 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Forms.GDRomExplorerForm
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.DiscView;
using GDRomExplorer.Events;
using GDRomExplorer.Resources;
using GDRomExplorer.UserControls;
using SEGATools.Audio;
using SEGATools.Disc;
using SEGATools.DiscFileSystem;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Forms.Layout;
namespace GDRomExplorer.Forms
{
public class GDRomExplorerForm : Form
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IDiscFileSystem discFileSystem;
private DiscViewExplorer.ActionsForEditMenuItem editMenuActions;
private string initialDirectory;
private IContainer components;
private StatusStrip statusStrip;
private DiscViewOpener discViewOpener;
private ToolStripStatusLabel toolStripStatusLabel;
private DiscViewExplorer discView;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripMenuItem closeToolStripMenuItem;
private ToolStripMenuItem exitToolStripMenuItem;
private ToolStripMenuItem toolsToolStripMenuItem;
private ToolStripMenuItem ConvertToolStripMenuItem;
private ToolStripMenuItem naomiBinarydecryptionToolStripMenuItem;
private ToolStripSeparator toolStripSeparator;
private ToolStripMenuItem aboutToolStripMenuItem;
private ToolStripMenuItem aboutGDRomExplorerToolStripMenuItem;
private MenuStrip menuStrip;
private DiscFormatProvider discFormatProvider;
private ToolStripMenuItem settingsToolStripMenuItem;
private ToolStripMenuItem ipViewerToolStripMenuItem;
private InitialProgramOpener ipOpener;
private ToolStripMenuItem encryptANaomiBinaryToolStripMenuItem;
private NaomiEncryptDecryptTool naomiEncryptDecryptTool;
private ToolStripMenuItem convertGDIForGDEMUToolStripMenuItem;
private ToolStripSeparator toolStripSeparator1;
private ToolStripMenuItem editToolStripMenuItem;
private GDDAConverterTool gddaConverterTool;
public GDRomExplorerForm()
{
this.InitializeComponent();
this.Text = Assembly.GetExecutingAssembly().GetName().Name;
}
private void GDRomExplorerForm_Load(object sender, EventArgs e)
{
this.RemoveImageMargin(this.menuStrip);
this.MenuClose();
this.DragDrop += new DragEventHandler(this.GDRomExplorerForm_DragDrop);
this.DragEnter += new DragEventHandler(this.GDRomExplorerForm_DragEnter);
this.discViewOpener.ImageLoaded += new EventHandler<EventArgs<IDiscFileSystem>>(this.discViewOpener_ImageLoaded);
this.discViewOpener.ImageNotLoaded += new EventHandler(this.discViewOpener_ImageNotLoaded);
this.discView.SelectionChanged += new EventHandler<EventArgs<DiscViewExplorer.ActionsForEditMenuItem>>(this.discView_SelectionChanged);
AppStatus.OnAppStatusUpdate += new AppStatus.AppStatusUpdateEventHandler(this.AppStatus_OnAppStatusUpdate);
string progamArgument = Program.GetProgamArgument();
if (!string.IsNullOrEmpty(progamArgument))
this.UpdateDialogInitialDirectory(progamArgument);
else
this.UpdateDialogInitialDirectory(Assembly.GetExecutingAssembly().GetName().CodeBase);
if (string.IsNullOrEmpty(progamArgument))
return;
this.discViewOpener.Open(progamArgument);
}
private void AppStatus_OnAppStatusUpdate(string message)
{
string str = char.ToUpper(message[0]).ToString() + message.Substring(1);
this.toolStripStatusLabel.Text = str;
this.toolStripStatusLabel.ToolTipText = str;
}
private void GDRomExplorerForm_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.All;
else
e.Effect = DragDropEffects.None;
}
private void GDRomExplorerForm_DragDrop(object sender, DragEventArgs e)
{
string[] data = (string[]) e.Data.GetData(DataFormats.FileDrop, false);
if (data.Length == 1)
this.discViewOpener.Open(Path.GetFullPath(data[0]));
else
GDRomExplorerForm.logger.Error((object) "Unhandled data for the drag & drop operation!");
}
private void discViewOpener_ImageLoaded(object sender, EventArgs<IDiscFileSystem> e)
{
this.discFileSystem = e.Value;
this.MenuOpen();
this.UpdateDialogInitialDirectory(this.discFileSystem.FileName);
this.discView.LoadDisc(this.discFileSystem);
}
private void discViewOpener_ImageNotLoaded(object sender, EventArgs e)
{
this.discFileSystem = (IDiscFileSystem) null;
this.MenuClose();
}
private void discView_SelectionChanged(
object sender,
EventArgs<DiscViewExplorer.ActionsForEditMenuItem> e)
{
this.editMenuActions = e.Value;
if (!this.editMenuActions.AnyAvailable)
this.editToolStripMenuItem.Enabled = false;
else
this.editToolStripMenuItem.Enabled = true;
}
private void MenuClose()
{
this.toolStripStatusLabel.Text = Strings.StatusLabelImageNotLoaded;
this.closeToolStripMenuItem.Enabled = false;
this.editToolStripMenuItem.Enabled = false;
this.discView.CloseDisc();
}
private void MenuOpen()
{
this.closeToolStripMenuItem.Enabled = true;
this.editToolStripMenuItem.Enabled = true;
}
private void UpdateDialogInitialDirectory(string initialPath)
{
this.initialDirectory = Path.GetDirectoryName(initialPath);
this.gddaConverterTool.InitialDirectory = this.initialDirectory;
this.naomiEncryptDecryptTool.InitialDirectory = this.initialDirectory;
}
private void RemoveImageMargin(MenuStrip Menu)
{
foreach (ToolStripItem toolStripItem in (ArrangedElementCollection) Menu.Items)
this.RemoveItemImageMargin(toolStripItem);
}
private void RemoveItemImageMargin(ToolStripItem Item)
{
if (!(Item is ToolStripMenuItem))
return;
ToolStripMenuItem toolStripMenuItem = Item as ToolStripMenuItem;
(toolStripMenuItem.DropDown as ToolStripDropDownMenu).ShowImageMargin = false;
foreach (object dropDownItem in (ArrangedElementCollection) toolStripMenuItem.DropDownItems)
{
if (dropDownItem is ToolStripItem)
this.RemoveItemImageMargin(dropDownItem as ToolStripItem);
}
}
private void ToolStripMenuItemExit_Click(object sender, EventArgs e)
{
this.discViewOpener.Close();
this.discView.CloseDisc();
this.discFileSystem = (IDiscFileSystem) null;
Application.Exit();
}
private void ToolStripMenuItemClose_Click(object sender, EventArgs e) => this.discViewOpener.Close();
private void ToolStripMenuItemOpenImageFile_Click(object sender, EventArgs e) => this.discViewOpener.Open();
private void ToolStripMenuItemShowGDDAConverter_Click(object sender, EventArgs e) => this.gddaConverterTool.OpenAndConvertGDDAFiles((IWin32Window) this, AudioConversionSettings.defaultAudioConvOptions());
private void ToolStripMenuItemAboutGDRomExplorer_Click(object sender, EventArgs e)
{
using (FormAbout formAbout = new FormAbout())
{
int num = (int) formAbout.ShowDialog((IWin32Window) this);
}
}
private void ToolStripMenuItemExportGDIForGDEMU_Click(object sender, EventArgs e)
{
using (FormGDEmuExportSettings emuExportSettings = new FormGDEmuExportSettings(this.initialDirectory))
{
int num = (int) emuExportSettings.ShowDialog((IWin32Window) this);
}
}
private void ToolStripMenuItemEncryptNaomiBinary_Click(object sender, EventArgs e) => this.naomiEncryptDecryptTool.OpenAndEncryptNaomiBinary((IWin32Window) this);
private void ToolStripMenuItemDecryptNaomiBinary_Click(object sender, EventArgs e) => this.naomiEncryptDecryptTool.OpenAndDecryptNaomiBinary((IWin32Window) this);
private void ToolStripMenuItemSettings_Click(object sender, EventArgs e)
{
using (FormSettings formSettings = new FormSettings())
{
int num = (int) formSettings.ShowDialog((IWin32Window) this);
}
}
private void ToolStripMenuItemIPViewer_Click(object sender, EventArgs e) => this.ipOpener.OpenAndViewInitialProgram((IWin32Window) this);
private void ToolStripMenuItemEdit_DropDownOpening(object sender, EventArgs e)
{
this.editToolStripMenuItem.DropDownItems.Clear();
this.editToolStripMenuItem.DropDownItems.AddRange(MenuItemFactory.CreateEditMenuItems(this.editMenuActions.DiscMenuItems, this.editMenuActions.SelectionMenuItems));
this.RemoveItemImageMargin((ToolStripItem) this.editToolStripMenuItem);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = (IContainer) new Container();
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (GDRomExplorerForm));
this.statusStrip = new StatusStrip();
this.toolStripStatusLabel = new ToolStripStatusLabel();
this.fileToolStripMenuItem = new ToolStripMenuItem();
this.openToolStripMenuItem = new ToolStripMenuItem();
this.closeToolStripMenuItem = new ToolStripMenuItem();
this.exitToolStripMenuItem = new ToolStripMenuItem();
this.toolsToolStripMenuItem = new ToolStripMenuItem();
this.ipViewerToolStripMenuItem = new ToolStripMenuItem();
this.ConvertToolStripMenuItem = new ToolStripMenuItem();
this.convertGDIForGDEMUToolStripMenuItem = new ToolStripMenuItem();
this.toolStripSeparator1 = new ToolStripSeparator();
this.encryptANaomiBinaryToolStripMenuItem = new ToolStripMenuItem();
this.naomiBinarydecryptionToolStripMenuItem = new ToolStripMenuItem();
this.toolStripSeparator = new ToolStripSeparator();
this.settingsToolStripMenuItem = new ToolStripMenuItem();
this.aboutToolStripMenuItem = new ToolStripMenuItem();
this.aboutGDRomExplorerToolStripMenuItem = new ToolStripMenuItem();
this.menuStrip = new MenuStrip();
this.editToolStripMenuItem = new ToolStripMenuItem();
this.discFormatProvider = new DiscFormatProvider(this.components);
this.discView = new DiscViewExplorer();
this.discViewOpener = new DiscViewOpener();
this.ipOpener = new InitialProgramOpener();
this.naomiEncryptDecryptTool = new NaomiEncryptDecryptTool(this.components);
this.gddaConverterTool = new GDDAConverterTool(this.components);
this.statusStrip.SuspendLayout();
this.menuStrip.SuspendLayout();
this.SuspendLayout();
this.statusStrip.BackColor = Color.Transparent;
this.statusStrip.Items.AddRange(new ToolStripItem[1]
{
(ToolStripItem) this.toolStripStatusLabel
});
this.statusStrip.Location = new Point(0, 540);
this.statusStrip.Name = "statusStrip";
this.statusStrip.ShowItemToolTips = true;
this.statusStrip.Size = new Size(784, 22);
this.statusStrip.TabIndex = 27;
this.statusStrip.Text = "statusStrip";
this.toolStripStatusLabel.AutoToolTip = true;
this.toolStripStatusLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.toolStripStatusLabel.Margin = new Padding(3, 3, 0, 2);
this.toolStripStatusLabel.Name = "toolStripStatusLabel";
this.toolStripStatusLabel.Size = new Size(766, 17);
this.toolStripStatusLabel.Spring = true;
this.toolStripStatusLabel.Text = "AppStatus";
this.toolStripStatusLabel.TextAlign = ContentAlignment.MiddleLeft;
this.fileToolStripMenuItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[3]
{
(ToolStripItem) this.openToolStripMenuItem,
(ToolStripItem) this.closeToolStripMenuItem,
(ToolStripItem) this.exitToolStripMenuItem
});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new Size(37, 20);
this.fileToolStripMenuItem.Text = "&File";
this.openToolStripMenuItem.BackColor = SystemColors.Window;
this.openToolStripMenuItem.BackgroundImageLayout = ImageLayout.None;
this.openToolStripMenuItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.ShortcutKeys = Keys.O | Keys.Control;
this.openToolStripMenuItem.Size = new Size(155, 22);
this.openToolStripMenuItem.Text = "&Open...";
this.openToolStripMenuItem.TextImageRelation = TextImageRelation.TextAboveImage;
this.openToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemOpenImageFile_Click);
this.closeToolStripMenuItem.BackColor = SystemColors.Window;
this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
this.closeToolStripMenuItem.Size = new Size(155, 22);
this.closeToolStripMenuItem.Text = "Close";
this.closeToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemClose_Click);
this.exitToolStripMenuItem.BackColor = SystemColors.Window;
this.exitToolStripMenuItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.ShortcutKeys = Keys.F4 | Keys.Alt;
this.exitToolStripMenuItem.Size = new Size(155, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemExit_Click);
this.toolsToolStripMenuItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.toolsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[8]
{
(ToolStripItem) this.ipViewerToolStripMenuItem,
(ToolStripItem) this.ConvertToolStripMenuItem,
(ToolStripItem) this.convertGDIForGDEMUToolStripMenuItem,
(ToolStripItem) this.toolStripSeparator1,
(ToolStripItem) this.encryptANaomiBinaryToolStripMenuItem,
(ToolStripItem) this.naomiBinarydecryptionToolStripMenuItem,
(ToolStripItem) this.toolStripSeparator,
(ToolStripItem) this.settingsToolStripMenuItem
});
this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
this.toolsToolStripMenuItem.Size = new Size(48, 20);
this.toolsToolStripMenuItem.Text = "&Tools";
this.ipViewerToolStripMenuItem.Name = "ipViewerToolStripMenuItem";
this.ipViewerToolStripMenuItem.ShortcutKeys = Keys.I | Keys.Control;
this.ipViewerToolStripMenuItem.Size = new Size(242, 22);
this.ipViewerToolStripMenuItem.Text = "IP.BIN Viewer";
this.ipViewerToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemIPViewer_Click);
this.ConvertToolStripMenuItem.BackColor = SystemColors.Window;
this.ConvertToolStripMenuItem.Name = "ConvertToolStripMenuItem";
this.ConvertToolStripMenuItem.ShortcutKeys = Keys.T | Keys.Control;
this.ConvertToolStripMenuItem.Size = new Size(242, 22);
this.ConvertToolStripMenuItem.Text = "Convert audio tracks";
this.ConvertToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemShowGDDAConverter_Click);
this.convertGDIForGDEMUToolStripMenuItem.Name = "convertGDIForGDEMUToolStripMenuItem";
this.convertGDIForGDEMUToolStripMenuItem.ShortcutKeys = Keys.G | Keys.Control;
this.convertGDIForGDEMUToolStripMenuItem.Size = new Size(242, 22);
this.convertGDIForGDEMUToolStripMenuItem.Text = "Convert GDI for GDEMU";
this.convertGDIForGDEMUToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemExportGDIForGDEMU_Click);
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new Size(239, 6);
this.encryptANaomiBinaryToolStripMenuItem.Name = "encryptANaomiBinaryToolStripMenuItem";
this.encryptANaomiBinaryToolStripMenuItem.ShortcutKeys = Keys.E | Keys.Control;
this.encryptANaomiBinaryToolStripMenuItem.Size = new Size(242, 22);
this.encryptANaomiBinaryToolStripMenuItem.Text = "&Encrypt a Naomi binary";
this.encryptANaomiBinaryToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemEncryptNaomiBinary_Click);
this.naomiBinarydecryptionToolStripMenuItem.BackColor = SystemColors.Window;
this.naomiBinarydecryptionToolStripMenuItem.Name = "naomiBinarydecryptionToolStripMenuItem";
this.naomiBinarydecryptionToolStripMenuItem.ShortcutKeys = Keys.D | Keys.Control;
this.naomiBinarydecryptionToolStripMenuItem.Size = new Size(242, 22);
this.naomiBinarydecryptionToolStripMenuItem.Text = "&Decrypt a Naomi binary";
this.naomiBinarydecryptionToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemDecryptNaomiBinary_Click);
this.toolStripSeparator.BackColor = SystemColors.Window;
this.toolStripSeparator.ForeColor = SystemColors.ControlText;
this.toolStripSeparator.Name = "toolStripSeparator";
this.toolStripSeparator.Size = new Size(239, 6);
this.settingsToolStripMenuItem.BackColor = SystemColors.Window;
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
this.settingsToolStripMenuItem.Size = new Size(242, 22);
this.settingsToolStripMenuItem.Text = "Settings";
this.settingsToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemSettings_Click);
this.aboutToolStripMenuItem.BackColor = SystemColors.Window;
this.aboutToolStripMenuItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
this.aboutToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[1]
{
(ToolStripItem) this.aboutGDRomExplorerToolStripMenuItem
});
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
this.aboutToolStripMenuItem.Size = new Size(24, 20);
this.aboutToolStripMenuItem.Text = "?";
this.aboutGDRomExplorerToolStripMenuItem.BackColor = SystemColors.Window;
this.aboutGDRomExplorerToolStripMenuItem.Name = "aboutGDRomExplorerToolStripMenuItem";
this.aboutGDRomExplorerToolStripMenuItem.Size = new Size(107, 22);
this.aboutGDRomExplorerToolStripMenuItem.Text = "About";
this.aboutGDRomExplorerToolStripMenuItem.Click += new EventHandler(this.ToolStripMenuItemAboutGDRomExplorer_Click);
this.menuStrip.BackColor = SystemColors.Window;
this.menuStrip.Items.AddRange(new ToolStripItem[4]
{
(ToolStripItem) this.fileToolStripMenuItem,
(ToolStripItem) this.editToolStripMenuItem,
(ToolStripItem) this.toolsToolStripMenuItem,
(ToolStripItem) this.aboutToolStripMenuItem
});
this.menuStrip.Location = new Point(0, 0);
this.menuStrip.Name = "menuStrip";
this.menuStrip.ShowItemToolTips = true;
this.menuStrip.Size = new Size(784, 24);
this.menuStrip.TabIndex = 25;
this.menuStrip.Text = "menuStrip";
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new Size(39, 20);
this.editToolStripMenuItem.Text = "&Edit";
this.editToolStripMenuItem.DropDownOpening += new EventHandler(this.ToolStripMenuItemEdit_DropDownOpening);
this.discView.AutoSize = true;
this.discView.BackColor = SystemColors.Window;
this.discView.Dock = DockStyle.Fill;
this.discView.Location = new Point(0, 82);
this.discView.Name = "discView";
this.discView.Padding = new Padding(4);
this.discView.Size = new Size(784, 458);
this.discView.TabIndex = 31;
this.discViewOpener.AutoSize = true;
this.discViewOpener.ButtonText = "&Open";
this.discViewOpener.Dock = DockStyle.Top;
this.discViewOpener.FileDialogFilters = (List<string>) null;
this.discViewOpener.InitialDirectory = "";
this.discViewOpener.Location = new Point(0, 24);
this.discViewOpener.MinimumSize = new Size(0, 58);
this.discViewOpener.Name = "discViewOpener";
this.discViewOpener.NotifyStatusEvents = true;
this.discViewOpener.Padding = new Padding(4);
this.discViewOpener.Size = new Size(784, 58);
this.discViewOpener.TabIndex = 28;
this.AllowDrop = true;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.AutoScroll = true;
this.AutoSize = true;
this.BackColor = SystemColors.Window;
this.BackgroundImageLayout = ImageLayout.None;
this.ClientSize = new Size(784, 562);
this.Controls.Add((Control) this.discView);
this.Controls.Add((Control) this.discViewOpener);
this.Controls.Add((Control) this.statusStrip);
this.Controls.Add((Control) this.menuStrip);
this.DoubleBuffered = true;
this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon");
this.MainMenuStrip = this.menuStrip;
this.MinimumSize = new Size(800, 600);
this.Name = nameof (GDRomExplorerForm);
this.StartPosition = FormStartPosition.CenterScreen;
this.Text = "GD-ROM Explorer";
this.Load += new EventHandler(this.GDRomExplorerForm_Load);
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,60 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31424.327
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GD-ROM Explorer", "GD-ROM Explorer.csproj", "{47780501-F392-43CA-A50C-9479421B4B55}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageReader", "..\ImageReader\ImageReader.csproj", "{2185F55E-A4DA-486F-ACC8-3EE955205CE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SEGATools", "..\SEGATools\SEGATools.csproj", "{4D3AB913-88D2-4DD1-A403-EA46D14C98E6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BIN", "..\formats\BIN\BIN.csproj", "{9BE87EC9-C89C-4521-BB87-5BBD997FA627}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CDI", "..\formats\CDI\CDI.csproj", "{A3861387-BB2E-4C3A-9AB2-43B77C393C24}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GDI", "..\formats\GDI\GDI.csproj", "{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ISO9660", "..\formats\ISO9660\ISO9660.csproj", "{A0814BED-4F13-4C76-AAE6-BAA35F9EEB49}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{47780501-F392-43CA-A50C-9479421B4B55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{47780501-F392-43CA-A50C-9479421B4B55}.Debug|Any CPU.Build.0 = Debug|Any CPU
{47780501-F392-43CA-A50C-9479421B4B55}.Release|Any CPU.ActiveCfg = Release|Any CPU
{47780501-F392-43CA-A50C-9479421B4B55}.Release|Any CPU.Build.0 = Release|Any CPU
{2185F55E-A4DA-486F-ACC8-3EE955205CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2185F55E-A4DA-486F-ACC8-3EE955205CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2185F55E-A4DA-486F-ACC8-3EE955205CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2185F55E-A4DA-486F-ACC8-3EE955205CE4}.Release|Any CPU.Build.0 = Release|Any CPU
{4D3AB913-88D2-4DD1-A403-EA46D14C98E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D3AB913-88D2-4DD1-A403-EA46D14C98E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D3AB913-88D2-4DD1-A403-EA46D14C98E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D3AB913-88D2-4DD1-A403-EA46D14C98E6}.Release|Any CPU.Build.0 = Release|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Release|Any CPU.Build.0 = Release|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Release|Any CPU.Build.0 = Release|Any CPU
{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}.Release|Any CPU.Build.0 = Release|Any CPU
{A0814BED-4F13-4C76-AAE6-BAA35F9EEB49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0814BED-4F13-4C76-AAE6-BAA35F9EEB49}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0814BED-4F13-4C76-AAE6-BAA35F9EEB49}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0814BED-4F13-4C76-AAE6-BAA35F9EEB49}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B500B1BD-BB99-4FFC-8B90-459648214A7E}
EndGlobalSection
EndGlobal

474
Explorer/Logger.cs Normal file
View File

@ -0,0 +1,474 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Logger
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using log4net;
using log4net.Core;
using System;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
namespace GDRomExplorer
{
internal static class Logger
{
private static readonly bool loggingIsOff = true;
static Logger()
{
try
{
Assembly.Load("log4net");
//log4net.Config.XmlConfigurator.Configure();
Logger.loggingIsOff = false;
}
catch
{
}
}
public static Logger.ILog CreateLog()
{
Type declaringType = new StackFrame(1, false).GetMethod().DeclaringType;
return !Logger.loggingIsOff ? (Logger.ILog) new Logger.Log4NetLogger(declaringType) : (Logger.ILog) new Logger.NoLog();
}
internal interface ILog
{
bool IsDebugEnabled { get; }
bool IsInfoEnabled { get; }
bool IsWarnEnabled { get; }
bool IsErrorEnabled { get; }
bool IsFatalEnabled { get; }
void Debug(object message);
void Debug(object message, Exception exception);
void DebugFormat(string format, params object[] args);
void DebugFormat(string format, object arg0);
void DebugFormat(string format, object arg0, object arg1);
void DebugFormat(string format, object arg0, object arg1, object arg2);
void DebugFormat(IFormatProvider provider, string format, params object[] args);
void Info(object message);
void Info(object message, Exception exception);
void InfoFormat(string format, params object[] args);
void InfoFormat(string format, object arg0);
void InfoFormat(string format, object arg0, object arg1);
void InfoFormat(string format, object arg0, object arg1, object arg2);
void InfoFormat(IFormatProvider provider, string format, params object[] args);
void Warn(object message);
void Warn(object message, Exception exception);
void WarnFormat(string format, params object[] args);
void WarnFormat(string format, object arg0);
void WarnFormat(string format, object arg0, object arg1);
void WarnFormat(string format, object arg0, object arg1, object arg2);
void WarnFormat(IFormatProvider provider, string format, params object[] args);
void Error(object message);
void Error(object message, Exception exception);
void ErrorFormat(string format, params object[] args);
void ErrorFormat(string format, object arg0);
void ErrorFormat(string format, object arg0, object arg1);
void ErrorFormat(string format, object arg0, object arg1, object arg2);
void ErrorFormat(IFormatProvider provider, string format, params object[] args);
void Fatal(object message);
void Fatal(object message, Exception exception);
void FatalFormat(string format, params object[] args);
void FatalFormat(string format, object arg0);
void FatalFormat(string format, object arg0, object arg1);
void FatalFormat(string format, object arg0, object arg1, object arg2);
void FatalFormat(IFormatProvider provider, string format, params object[] args);
}
private class NoLog : Logger.ILog
{
public bool IsDebugEnabled => false;
public bool IsInfoEnabled => false;
public bool IsWarnEnabled => false;
public bool IsErrorEnabled => false;
public bool IsFatalEnabled => false;
public void Debug(object message)
{
}
public void Debug(object message, Exception exception)
{
}
public void DebugFormat(string format, params object[] args)
{
}
public void DebugFormat(string format, object arg0)
{
}
public void DebugFormat(string format, object arg0, object arg1)
{
}
public void DebugFormat(string format, object arg0, object arg1, object arg2)
{
}
public void DebugFormat(IFormatProvider provider, string format, params object[] args)
{
}
public void Info(object message)
{
}
public void Info(object message, Exception exception)
{
}
public void InfoFormat(string format, params object[] args)
{
}
public void InfoFormat(string format, object arg0)
{
}
public void InfoFormat(string format, object arg0, object arg1)
{
}
public void InfoFormat(string format, object arg0, object arg1, object arg2)
{
}
public void InfoFormat(IFormatProvider provider, string format, params object[] args)
{
}
public void Warn(object message)
{
}
public void Warn(object message, Exception exception)
{
}
public void WarnFormat(string format, params object[] args)
{
}
public void WarnFormat(string format, object arg0)
{
}
public void WarnFormat(string format, object arg0, object arg1)
{
}
public void WarnFormat(string format, object arg0, object arg1, object arg2)
{
}
public void WarnFormat(IFormatProvider provider, string format, params object[] args)
{
}
public void Error(object message)
{
}
public void Error(object message, Exception exception)
{
}
public void ErrorFormat(string format, params object[] args)
{
}
public void ErrorFormat(string format, object arg0)
{
}
public void ErrorFormat(string format, object arg0, object arg1)
{
}
public void ErrorFormat(string format, object arg0, object arg1, object arg2)
{
}
public void ErrorFormat(IFormatProvider provider, string format, params object[] args)
{
}
public void Fatal(object message)
{
}
public void Fatal(object message, Exception exception)
{
}
public void FatalFormat(string format, params object[] args)
{
}
public void FatalFormat(string format, object arg0)
{
}
public void FatalFormat(string format, object arg0, object arg1)
{
}
public void FatalFormat(string format, object arg0, object arg1, object arg2)
{
}
public void FatalFormat(IFormatProvider provider, string format, params object[] args)
{
}
}
private class Log4NetLogger : Logger.ILog
{
private readonly log4net.ILog rootLogger;
private readonly Type loggingType;
private readonly ILogger logger;
public Log4NetLogger(Type type)
{
this.loggingType = type;
this.rootLogger = LogManager.GetLogger(this.loggingType);
this.logger = ((ILoggerWrapper) this.rootLogger).Logger;
}
public bool IsDebugEnabled => this.rootLogger.IsDebugEnabled;
public bool IsInfoEnabled => this.rootLogger.IsInfoEnabled;
public bool IsWarnEnabled => this.rootLogger.IsWarnEnabled;
public bool IsErrorEnabled => this.rootLogger.IsFatalEnabled;
public bool IsFatalEnabled => this.rootLogger.IsFatalEnabled;
public void Debug(object message)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, message, (Exception) null);
}
public void Debug(object message, Exception exception)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, message, exception);
}
public void DebugFormat(string format, params object[] args)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args), (Exception) null);
}
public void DebugFormat(string format, object arg0)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0), (Exception) null);
}
public void DebugFormat(string format, object arg0, object arg1)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1), (Exception) null);
}
public void DebugFormat(string format, object arg0, object arg1, object arg2)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1, arg2), (Exception) null);
}
public void DebugFormat(IFormatProvider provider, string format, params object[] args)
{
if (!this.IsDebugEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Debug, (object) string.Format(provider, format, args), (Exception) null);
}
public void Info(object message)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, message, (Exception) null);
}
public void Info(object message, Exception exception)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, message, exception);
}
public void InfoFormat(string format, params object[] args)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args), (Exception) null);
}
public void InfoFormat(string format, object arg0)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0), (Exception) null);
}
public void InfoFormat(string format, object arg0, object arg1)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1), (Exception) null);
}
public void InfoFormat(string format, object arg0, object arg1, object arg2)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1, arg2), (Exception) null);
}
public void InfoFormat(IFormatProvider provider, string format, params object[] args)
{
if (!this.IsInfoEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Info, (object) string.Format(provider, format, args), (Exception) null);
}
public void Warn(object message)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, message, (Exception) null);
}
public void Warn(object message, Exception exception)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, message, exception);
}
public void WarnFormat(string format, params object[] args)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args), (Exception) null);
}
public void WarnFormat(string format, object arg0)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0), (Exception) null);
}
public void WarnFormat(string format, object arg0, object arg1)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1), (Exception) null);
}
public void WarnFormat(string format, object arg0, object arg1, object arg2)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1, arg2), (Exception) null);
}
public void WarnFormat(IFormatProvider provider, string format, params object[] args)
{
if (!this.IsWarnEnabled)
return;
this.logger.Log(this.loggingType, (Level) Level.Warn, (object) string.Format(provider, format, args), (Exception) null);
}
public void Error(object message) => this.logger.Log(this.loggingType, (Level) Level.Error, message, (Exception) null);
public void Error(object message, Exception exception) => this.logger.Log(this.loggingType, (Level) Level.Error, message, exception);
public void ErrorFormat(string format, params object[] args) => this.logger.Log(this.loggingType, (Level) Level.Error, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args), (Exception) null);
public void ErrorFormat(string format, object arg0) => this.logger.Log(this.loggingType, (Level) Level.Error, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0), (Exception) null);
public void ErrorFormat(string format, object arg0, object arg1) => this.logger.Log(this.loggingType, (Level) Level.Error, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1), (Exception) null);
public void ErrorFormat(string format, object arg0, object arg1, object arg2) => this.logger.Log(this.loggingType, (Level) Level.Error, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1, arg2), (Exception) null);
public void ErrorFormat(IFormatProvider provider, string format, params object[] args) => this.logger.Log(this.loggingType, (Level) Level.Error, (object) string.Format(provider, format, args), (Exception) null);
public void Fatal(object message) => this.logger.Log(this.loggingType, (Level) Level.Fatal, message, (Exception) null);
public void Fatal(object message, Exception exception) => this.logger.Log(this.loggingType, (Level) Level.Fatal, message, exception);
public void FatalFormat(string format, params object[] args) => this.logger.Log(this.loggingType, (Level) Level.Fatal, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args), (Exception) null);
public void FatalFormat(string format, object arg0) => this.logger.Log(this.loggingType, (Level) Level.Fatal, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0), (Exception) null);
public void FatalFormat(string format, object arg0, object arg1) => this.logger.Log(this.loggingType, (Level) Level.Fatal, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1), (Exception) null);
public void FatalFormat(string format, object arg0, object arg1, object arg2) => this.logger.Log(this.loggingType, (Level) Level.Fatal, (object) string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, arg0, arg1, arg2), (Exception) null);
public void FatalFormat(IFormatProvider provider, string format, params object[] args) => this.logger.Log(this.loggingType, (Level) Level.Fatal, (object) string.Format(provider, format, args), (Exception) null);
}
}
}

View File

@ -0,0 +1,76 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Others.ListViewColumnSorter
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using ImageReader.ISO9660.DirectoryRecords;
using System;
using System.Collections;
using System.Windows.Forms;
namespace GDRomExplorer.Others
{
public class ListViewColumnSorter : IComparer
{
public int SortColumn;
public SortOrder Order;
private CaseInsensitiveComparer ObjectCompare;
public ListViewColumnSorter()
{
this.SortColumn = 0;
this.Order = SortOrder.None;
this.ObjectCompare = new CaseInsensitiveComparer();
}
public int Compare(object x, object y)
{
ListViewItem listViewItem1 = (ListViewItem) x;
ListViewItem listViewItem2 = (ListViewItem) y;
int num;
if (listViewItem1.Name.Equals(DirectoryRecord.PARENT_DIRECTORY_NAME))
num = this.Order == SortOrder.Ascending ? -1 : 1;
else if (listViewItem1.Tag != null && listViewItem2.Tag != null)
{
DirectoryRecord tag1 = (DirectoryRecord) listViewItem1.Tag;
DirectoryRecord tag2 = (DirectoryRecord) listViewItem2.Tag;
switch (this.SortColumn)
{
case 0:
num = this.CompareFilename(tag1, tag2);
break;
case 1:
case 2:
num = this.ObjectCompare.Compare((object) tag1.ExtentSize, (object) tag2.ExtentSize);
break;
case 3:
num = this.ObjectCompare.Compare((object) tag1.Extent, (object) tag2.Extent);
break;
case 4:
num = this.CompareDateTime(tag1.RecordingDateTime, tag2.RecordingDateTime);
break;
default:
num = this.ObjectCompare.Compare((object) listViewItem1.SubItems[this.SortColumn].Text, (object) listViewItem2.SubItems[this.SortColumn].Text);
break;
}
}
else
num = this.ObjectCompare.Compare((object) listViewItem1.SubItems[this.SortColumn].Text, (object) listViewItem2.SubItems[this.SortColumn].Text);
if (this.Order == SortOrder.Ascending)
return num;
return this.Order == SortOrder.Descending ? -num : 0;
}
private int CompareFilename(DirectoryRecord x, DirectoryRecord y) => !x.IsDirectory || y.IsDirectory ? (!y.IsDirectory || x.IsDirectory ? this.ObjectCompare.Compare((object) x.Name, (object) y.Name) : 1) : -1;
private int CompareDateTime(DateTime? x, DateTime? y)
{
if (!x.HasValue && !y.HasValue)
return 0;
if (!x.HasValue)
return 1;
return !y.HasValue ? -1 : DateTime.Compare(x.Value, y.Value);
}
}
}

View File

@ -0,0 +1,62 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Others.UserProcessEventArgsConverter
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using SEGATools.UserProcess;
using System;
using System.Resources;
using System.Text;
namespace GDRomExplorer.Others
{
public class UserProcessEventArgsConverter
{
public static int MaximumNumberOfLinesToDisplay = 10;
public static string ToFormatedString(
UserProcessWaitingForUserConsentEventArgs eventArgs,
ResourceManager resourceManager)
{
return !(eventArgs is UserProcessWaitingForUserConsentFileConflictEventArgs) ? UserProcessEventArgsConverter.DefaultWaitForUserConsentEventArgs.ToFormatedString(eventArgs, resourceManager) : UserProcessEventArgsConverter.FileConflictEventArgs.ToFormatedString(eventArgs, resourceManager);
}
private static class DefaultWaitForUserConsentEventArgs
{
public static string ToFormatedString(
UserProcessWaitingForUserConsentEventArgs eventArgs,
ResourceManager resourceManager)
{
string format = resourceManager.GetString(eventArgs.QuestionContentResourceName);
if (eventArgs.HasStringArguments)
format = string.Format(format, (object[]) eventArgs.QuestionContentArgs);
return format;
}
}
private static class FileConflictEventArgs
{
public static string ToFormatedString(
UserProcessWaitingForUserConsentEventArgs eventArgs,
ResourceManager resourceManager)
{
return string.Format(resourceManager.GetString(eventArgs.QuestionContentResourceName), (object) UserProcessEventArgsConverter.FileConflictEventArgs.CreateFileList(eventArgs.QuestionContentArgs, UserProcessEventArgsConverter.MaximumNumberOfLinesToDisplay));
}
private static string CreateFileList(string[] files, int MaximumNumberOfFilesToDisplay)
{
StringBuilder stringBuilder = new StringBuilder();
int num = Math.Min(MaximumNumberOfFilesToDisplay, files.Length);
for (int index = 0; index < num; ++index)
{
string file = files[index];
stringBuilder.Append("- ").Append(file).Append("\n");
}
if (num < files.Length)
stringBuilder.Append("- etc.").Append("\n");
return stringBuilder.ToString();
}
}
}
}

70
Explorer/Program.cs Normal file
View File

@ -0,0 +1,70 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Program
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Forms;
using System;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Threading;
using System.Windows.Forms;
namespace GDRomExplorer
{
public class Program
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private static readonly string THRUSTED_DOMAIN_NAME = "GDROMExplorer Thrusted Domain";
private static string inputImageFile = string.Empty;
public static string GetProgamArgument() => Program.inputImageFile;
[STAThread]
private static void Main(string[] args)
{
if (args.Length > 0)
Program.inputImageFile = args[0];
PermissionSet grantSet = new PermissionSet(PermissionState.Unrestricted);
AppDomain.CreateDomain(Program.THRUSTED_DOMAIN_NAME, (Evidence) null, new AppDomainSetup()
{
ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
}, grantSet).CreateInstance(Assembly.GetExecutingAssembly().FullName, typeof (Program).FullName);
}
public Program()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic);
Application.ThreadException += new ThreadExceptionEventHandler(Program.Application_ThreadException);
if (!Program.LoadAssembly("ImageReader", "ImageReader.AssemblyTest") || !Program.LoadAssembly("SEGATools", "SEGATools.AssemblyTest"))
return;
Application.Run((Form) new GDRomExplorerForm());
}
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
Program.logger.ErrorFormat("Unhandled exception: {0}", (object) e.Exception);
int num = (int) MessageBox.Show("An unexpected error occurred.", "Error in Application", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
private static bool LoadAssembly(string assemblyName, string typeName)
{
try
{
AppDomain.CurrentDomain.CreateInstance(assemblyName, typeName);
}
catch (Exception ex)
{
Program.logger.Error((object) ex);
int num = (int) MessageBox.Show(assemblyName + ".dll is corrupted or missing!", Application.ProductName + ": Error!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return false;
}
return true;
}
}
}

View File

@ -0,0 +1,61 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Properties.Resources
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Resources;
using System.Runtime.CompilerServices;
namespace GDRomExplorer.Properties
{
[DebuggerNonUserCode]
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
internal Resources()
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (object.ReferenceEquals((object) GDRomExplorer.Properties.Resources.resourceMan, (object) null))
GDRomExplorer.Properties.Resources.resourceMan = new ResourceManager("GDRomExplorer.Properties.Resources", typeof (GDRomExplorer.Properties.Resources).Assembly);
return GDRomExplorer.Properties.Resources.resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get => GDRomExplorer.Properties.Resources.resourceCulture;
set => GDRomExplorer.Properties.Resources.resourceCulture = value;
}
internal static Icon extract_icon => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (extract_icon), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Icon file => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (file), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Icon folder_open => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (folder_open), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Icon folder_up => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (folder_up), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Icon help => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (help), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Bitmap paypal_donate => (Bitmap) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (paypal_donate), GDRomExplorer.Properties.Resources.resourceCulture);
internal static Icon zoom => (Icon) GDRomExplorer.Properties.Resources.ResourceManager.GetObject(nameof (zoom), GDRomExplorer.Properties.Resources.resourceCulture);
}
}

View File

@ -0,0 +1,374 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="folder_up" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAIAEBAAAAEACABoBQAAJgAAABAQAAABACAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAB
AAAAAAAAAAAAAAABAAAAAQAAAAAAAANpCAAEawsABHQKAAR7CwAEfgoAA2gRABB9HQAVfy4AAmxwAASA
CwAFgwwABYYNAAaRDQAJhxMACoAUAAmOEgAPhx8ACpoUAB6BLQAVkyoAHZk1ABKhIwAUpScAE6kmABqn
MgAdsDYAH7U4AC2XVAAnrEUAJ7xHAC24UQAsnGcAOax+AFiyfgArwk0AMslaADXKXAA1zF0ANs5gAEHe
dQBG43oAAnGZAANvpwACdKsAAnSsAEm1kQBbx7AAI5jMACedzgAsoc4AL6bPADOpzwBKvvYAbNnJAF7Q
4gBPxPcAU8f3AFTH9wBTx/gAVMf4AFfK+ABe0fkAZ9n3AGnc+gBv4/oAcOL2AHTl+wB66/4Ag8ngAIzY
+gCS3fsAl+DyAJ3j8gCZ4/sAgvL9AIn5/gCP/v8Ao+nzAKnu8wCh6fwAp+/8AKzw9AC59P4A1Pf6AP7+
/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLS0tLS0tLS0tLS0tAAAtNS1GNTU1NTU1NTUwSC0ALTgtRzw6
PDo8PDw6MEktAC09LUo+Pj4+Pj4+PjJOLQAtPi1QQCABAyA3QEAyUi0ALT8tUENDIQoKCEJDNFItAC1B
LVVTU1MiCgoTU0VULQAtRC0tLS0tCQoNBiotLS0ALUtLS0tLSy8PEgouKwAAAC1VTExMTEw2ERgQHCsA
AAAALVVMAQEBARQbFgEBAQEAAAAtLSoBESclHhoXEAYAAAAAAAAAAAEVKCUjGQEAAAAAAAAAAAAAAR0p
JQEAAAAAAAAAAAAAAAABHwEAAAAAAAAAAAAAAAAAAAEAAAAAAACAAwAAAAEAAAABAAAAAQAAAAEAAAAB
AAAAAQAAAAEAAAAHAAAABwAAgAEAAMADAAD8BwAA/g8AAP8fAAD/vwAAKAAAABAAAAAgAAAAAQAgAAAA
AABABAAAAAAAAAAAAAAAAAAAAAAAAAJ0rE0CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0
rP8CdKz/AnSs/wJ0rP8CdKz/AnSsTQAAAAACdKz/SLz2/wJ0rP+M2Pr/S7/3/0q/9v9Kv/f/Sr/3/0q/
9v9Kv/f/Sr/2/0u/9v8jmMz/l+Dy/wJ0rP8AAAAAAnSs/0/E9/8CdKz/kt37/1TH+P9Ux/f/U8f4/1TH
9/9Ux/j/VMf4/1TH+P9Tx/f/J53O/53j8v8CdKz/AAAAAAJ0rP9Xyvj/AnSs/5nj+/9e0fr/XtH6/17R
+v9e0fr/XtH6/1/R+v9e0fj/XtH4/yyhzv+j6fP/AnSs/wAAAAACdKz/XtP6/wJ0rP+h6fz/adz6/yyd
Z/8DaQj/BHQK/yycZ/9e0OL/adz6/2rd+/8vps//qe7z/wJ0rP8AAAAAAnSs/2fZ9/8CdKv/p+/8/3Tl
+/905fv/Oax+/wV/C/8EgAv/FX8u/3Di9v905fv/M6nP/6zw9P8CdKz/AAAAAAJ0rP9v4/r/AnSr////
//+69P7/uPT+/7r0/v9Ysn7/BYYN/wR+Cv8egS3/uPT+/4PJ4P/U9/r/AnSs/wAAAAACdKz/euv+/wJ0
rP8CdKz/AnSs/wJ0rP8CdKz/Amxw/wWDDP8GkQ3/A2gR/wJwmv8CdKz/AnSs/wJ0rP8AAAAAAnSs/4Py
/v+C8/7/gvP+/4Py/P+D8/7/gvP+/1vHsP8KgBT/CpoU/wR7C/9JtZH/A2+n/wAAAAAAAAAAAAAAAAJ0
rP/+/v7/ifr//4n6/v+J+v7/ivj+/4r6/v9s2cn/D4cf/xOpJv8JjhL/LZdU/wNvp/8AAAAAAAAAAAAA
AAACdKxNAnSs//7+/v+P/v//BGsL/wRrC/8Eawv/BGsL/xWTKv8ftTj/EqEj/wRrC/8Eawv/BGsL/wRr
C/8AAAAAAAAAAAJ0rE0CdKz/AnSs/wJzmf8Eawv/EH0d/zbOYP8yyVr/J7xH/x2wNv8UpSf/CYcT/wRr
C/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARrC/8dmTX/Qd51/zXMXf8rwk3/Gqcy/wRr
C/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGsL/yesRf9G43r/Ncpc/wRr
C/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEawv/LbhR/wRr
C/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARr
C/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAH
AAAABwAAAAEAAIADAAD8BwAA/g8AAP8fAAD/vwAA
</value>
</data>
<data name="extract_icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAGw0IACURFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABPiAlBIxJkQNuNg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABMRkPB65g2gSDRC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABHtCfQe/ae4CSSYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAASUTAQanW9YHtmTrATseAgAAAAAAAAAAAAAAAAAAAAAAAAAAASsVDwE+
HykAAAAAAAAAAAAAAAAAAAAAAAAAAAExGAwHv2n7B8Vt/gJTKzkAAAAAAAAAAAAAAAAAAAAAAAAAAAJO
JyEHtGTkAksnKgAAAAAAAAAAAAAAAAAAAAAFRiQZEcBu/wjAa/8GoljYATseJAAAAAAAAAAAAAAAAAAA
AAACTSYhCMtx/weyYuQCSiYqAAAAAAAAAAAAAAAADT8kDVvPlvw4yYT/Dr5r/wexYfEEcz6VAksnVwI/
IVACPyFQAlcsZgfFbv8Ix2//Bq9g5AJJJSoAAAAAAAAAAAAAAABPuIPPbdij/2fWn/9EzIr/I8J3/wu8
af8IvGj/CL5p/wi/av8IwGr/CMFr/wjCbP8Gq17kAkglKgAAAAAAAAAAMZZhXWzXov9s16L/adag/2TW
nv9d1Jv/Ss+Q/znKhf8rxn3/IcR3/xjCc/8SwW//DcBt/wmpXeQDSCUnAAAAAAAAAABCr3eUa9eh/mrX
of9l1p//YNWc/1zUmv9X05j/UtKW/07Rk/9J0ZH/Q9CO/z7PjP8vwHvbD4RJHQAAAAAAAAAAAAAAADiv
cldTxozTY9Sd/mHVnf9d1Jv/WNOY/1PTlv9P0pT/StGR/0XQj/80wH3cGJdYHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACKSVyArnmM6K6BkOimgYzohkFdUTtGT/0vRkv85wX/bG5VXHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEgoIU/Rk/8+wYLcHZRXHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtHKCFBwILbIJNYHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSygLFoNKHAAAAAAAAAAAAAAAAAAA
AAAAAAAA5/8AAMf/AACP/wAAj/8AAA+fAAAPjwAAB4cAAAADAACAAQAAgAAAAMAAAADgAQAA+AMAAP+H
AAD/jwAA/58AAA==
</value>
</data>
<data name="paypal_donate" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
R0lGODlhXAAaAIcPAP/x2//9+P7mtP+vM/+sLf7kr/7gpf7hqv7fof7ShP+xOP+zPUBRVv61Qr65oM8L
AhA+a3+Ddb6qfEBedYBvR/63SGB0fL+OOxA+ahA6Yu7br56fkDBUc6+FOyBKcc6/lq6qlf/CZSBJbe+n
Ns7AnSBDYDBKW56hlDBRbFBZVH+KiL61lf66TXCBhv/HaiBJb/61Q56knmB0fv++Wo6VjP+pJp6fjf/c
qI6Uid+fOWBvcXBoTSBJbiBCXn+JhEBbbt7Qqu7euv/nw/+2R0BRWI6Md8+YPY6Th/+0Qc+UNCBHar+Q
QI92Q++jLEBgeyBCX//Uk2B1gH+Mi/+9Wu7Vof+tL//Eat+bMP+yO//js/7Oe/7NenCCi/+2Q/7OgP+6
T//is1Brfv7RhP/y3b60kv7cmv+5S/7ZlO7Und7LoWB2gRA7Yv+/V56WeXBnS87Fqv/Nf/7Zl66qkX+N
kP7HbP6zPb61mWBgT//gro95SXB/gv/Jb//cp//v1H+Ok//Pg86/md7Opv/owv/26EBedmBhUXB/gP7B
X+7Zqv7Mef7CYf7CYkBfd//z3/68Uv/Gb0BSWRA7Y1Blb/+qKf66Tv/qx+7Wps+VOP7gqHB5c4BwSVBp
eq6smK6unN7Knf7Pfa+IQ/+4Sv/hss7EpUBgev+uMZ+ARp99P//qw1Bqe6+GP/7DZFBrgJ9+QnB/hP7d
n7+MOP7NfY6Wj/7nuv7pwP/57v/lvf/Znv/25f/NgP/y2//v0v/BYf/syP+1Qv+qKAAzZswAAP+ZMwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAAPACwAAAAAXAAaAAAI/wAfCBw4UJjBgwgTKlzIsKHDhwwJ
Spz4QFgIPmMCaNzIsaPHjyBDihzJcZCoR8IoShRmpU+tlzBjypxJs6bNmzhvNoKTUqUwPLiCCh1KtKjR
o0iTKl0aVFDPlWB0SZ1KtarVq1izat3KlWqlpwKF/dlFtqzZs2jTql3Ltq1btFnAlkLVq67du3jz6t3L
t6/fv3q/FFxEq7Dhw4gPxwDGGJgHP0ESS55MmVaQGJUzI/bSk8CqWaBDix4tmotjJ04gAGNFurXr1288
zHlNu3UsAhWxOMIkoLfv38B9kwLmoDcQ1aN+O3CgIbgADQ6AAF/e3HcYYJ18Qy/uvPvvQ3UMwv9gQaeA
+fPo059njOh8C2CyzJ9QzbjFemBS6HOSTx/YCfP9qVFAfoy9EIh6CKInBgswGFTBg4kcIOGEFFZ4AAnA
vEChCsCocMAGwGCwAQgcALPBhYxxAEIUwDBygCUhgkBDiAek4QpjKpAwIwd2sJiKhUBOGAclDxrUwJEN
KPKKAUw26aSTOAAjg5N6AIODATwAswKTcgCziQE2AMMDFWBK+SQgjDG5AjCEMIkBMJ4YQEWaT9bZ5BZI
NmDQAnzy2cUeZyAg6KCECmoBMEcQKgIwH3wAjAiDkgHMBAgc6oOhiCKAhgWLMkYpAj4AYwgCjk46wQSM
FaoqAmVoEUqffBr/pMCstM5qhgufJKDrrruiAIwEuxYBjBIJSADMD8ECo0MCvgLL7K8J/ACMJBJEAEwm
uuoATBvFDhvBt9/yKm4CLrBRa60GVTHAuuy26267jK07Qh6MLTFADsCUMMIAI0QCjL3xrhtwwJAAY8q6
JQBjxL35rmsEKO9GHHEVBv1CwMUYZ6wxxhc05nErGBMBjAmaPAFMIQR0bMLFKl9scgopMHbBxYztoAoB
MROxwxrAXLLxzxtPkpIwvxRt9NFIG90BA0wzTcEVRzfhRgbA9EBB0UszgTUDWv8CSw8ZUEABA0kUTQHV
p/zSxB1Uk53022/3JEwNcNdt991456133TU8jyWML4AHLvjghBdu+OGIJ6644WAJgwQvkEcu+eSUV275
5ZhnrjnlSIBV0Qy5hC766KSXbvrpqKeu+uqjz+B5WCHcIvvstNdu++2456777rzLHsLrBQ1xgy3EF2/8
8cgnr/zyzDfP/A1DAL/SFFAIAcD12Gev/fbcd+/99+BnLwQUU0jvE0Top6/++gep9EBAADs=
</value>
</data>
<data name="folder_open" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAIAEBAAAAEACABoBQAAJgAAABAQAAABACAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAB
AAAAAAAAAAAAAAABAAAAAQAAAAAAAANvpwACdKwACX60AP8A/wALgbcADIG6ABGEtwATisQAI5LEACOY
zAAnnc4ALKHOAC+mzwAzqc8AK6TRADOq4ABKsdcAVrbhAEq/9gBc0e8AS8D3AFPH9wBUx/cAU8f4AFTH
+ABXyvgAXtH5AGrL+ABo2vsAadz6AHDj+wB05fsAdOX8AHng+wB66/0Ag8neAILV7wCJ2foAmeL7AJbr
+wCC8v0Aifn+AI/+/wC66+8AufT8AMXv9gDj/v4A/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgICAgIAAAACCBIcFRUVFRUVFRUKBgAAAhAJJhkX
GRcZGRkXCiwCAAIaAicbGxsbGxsbGwwsAgACGwUlIh4eHh4eHh4MLAUAAh4PESggICAgICAgDiwsAgIg
FAcwLS0tLS0tLSQvLgICIyMDAgICAgICAgICAgICAikpKSkpKSkpKSkpAQAAAAIwKioqKioqKioqKgEA
AAAAAjAqKysCAgICAgIAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACABwAAAAMAAAABAAAAAQAAAAEAAAAA
AAAAAAAAAAAAAAAHAAAABwAAgA8AAMP/AAD//wAA//8AAP//AAD//wAAKAAAABAAAAAgAAAAAQAgAAAA
AABABAAAAAAAAAAAAAAAAAAAAAAAAAJ0rE0CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0
rP8CdKz/AnSs/wJ0rP8CdKz/AAAAAAAAAAACdKz/E4rE/1W24P9Qwff/S7/3/0q/9/9Kv/f/Sr/3/0q/
9v9Kv/f/Sr/2/0vA9/8jmMz/AnSs/wJ0rE0AAAAAAnSs/zOq4P9Dpc//e9X6/1TH+P9Ux/f/U8f4/1TH
9/9Ux/j/VMf4/1TH+P9Tx/f/J53O/2rL5f8CdKz/AAAAAAJ0rP9Xyvj/CXqx/6Pm/P9j0/r/XtH6/17R
+v9e0fr/XtH6/1/R+v9e0fj/XtH4/yyhzv+Z7ff/AnSs/wAAAAACdKz/XtP6/wuBt/970+//i+X7/2rc
+v9p3Pv/adz7/2rc+/9p3Pv/adz6/2rd+/8vps//n/D3/wJ0rP8CdKxNAnSs/2ja+/8rpNH/MqbQ/63w
/P915fv/dOX7/3Tl/P905fz/dOX7/3Tl/P905fv/M6nP/6P09/9Su9f/AnSs/wJ0rP9w4/v/XNHv/wl+
sv//////uvb+/7r2/v+69v7/uvb//7r0//+69v7/uvb//4TK4P/V+Pr/0PT4/wJ0rP8CdKz/euv+/3rr
/P8Kf7X/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8CdKz/AnSs/4Py
/v+C8/7/gvP+/4Py/P+D8/7/gvP+/4Py/v+C8/z/g/L+/4Lz/v+C8/7/A2+n/wAAAAAAAAAAAAAAAAJ0
rP/+/v7/ifr//4n6/v+J+v7/ivj+/4r6/v+J+P7/ivr+/4r6//+J+v//ivr//wNvp/8AAAAAAAAAAAAA
AAACdKxNAnSs//7+/v+P/v//j/7//4/+//8CdKz/AnSs/wJ0rP8CdKz/AnSs/wJ0rP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAJ0rE0CdKz/AnSs/wJ0rP8CdKz/AnSsTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAH
AAAABwAAAA8AAIH/AAD//wAA//8AAP//AAD//wAA
</value>
</data>
<data name="file" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAIAEBAAAAEACABoBQAAJgAAABAQAAABACAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAB
AAAAAAAAAAAAAAABAAAAAQAAAAAAAJyLfgD/AP8AsZCOALCekACyoJIAtaGTALqmlwDTwbEA1cC3AN7P
zgD/3sIA/+HGAP/jywD/5s8A/+nUAP/r2QD/7d0A/u/iAP7y5gD+9OsA+vbwAP738AD++vQA/vv6AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAAAAAAMYGBgYGBgYGBgYAwAAAAADGBgY
GBgYGBgYGAMAAAAAAxcXFxcXFxcXFxcDAAAAAAMWFhYWFhYWFhYWAwAAAAADFBQUFBQUFBQUFAMAAAAA
AxMTExMTExMTExMDAAAAAAMSEhISEhISEhISAwAAAAADEREREREREREREQMAAAAAAxEQERAREAgICAgD
AAAAAAMQDhAOEBAGBQQEAwAAAAADDg4ODg4OAQEBAQMAAAAAAw4MDgwOBhQUCgMAAAAAAAMMDAwMDAcX
CAMAAAAAAAADCwsLCwsGCAMAAAAAAAAAAwMDAwMDAwMAAAAAAADAAwAAwAMAAMADAADAAwAAwAMAAMAD
AADAAwAAwAMAAMADAADAAwAAwAMAAMADAADABwAAwA8AAMAfAADAPwAAKAAAABAAAAAgAAAAAQAgAAAA
AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZCO/7GQjv+xkI7/sZCO/7GQjv+xkI7/sZCO/7GQ
jv+xkI7/sZCO/7GQjv+xkI7/AAAAAAAAAAAAAAAAAAAAALGQjv/++/r//vv6//77+v/++/r//vv6//77
+v/++/r//vv6//77+v/++/r/sZCO/wAAAAAAAAAAAAAAAAAAAACxkI7//vv6//77+v/++/r//vv6//77
+v/++/r//vv6//77+v/++/r//vv6/7GQjv8AAAAAAAAAAAAAAAAAAAAAsZCO//769P/++vT//vr0//76
9P/++vT//vr0//769P/++vT//vr0//769P+xkI7/AAAAAAAAAAAAAAAAAAAAALGQjv/+9/D//vfw//73
8P/+9/D//vfw//738P/+9/D//vfw//738P/+9/D/sZCO/wAAAAAAAAAAAAAAAAAAAACxkI7//vTr//70
6//+9Ov//vTr//706//+9Ov//vTr//706//+9Ov//vTr/7GQjv8AAAAAAAAAAAAAAAAAAAAAsZCO//7y
5v/+8ub//vLm//7y5v/+8ub//vLm//7y5v/+8ub//vLm//7y5v+xkI7/AAAAAAAAAAAAAAAAAAAAALGQ
jv/+7+L//u/i//7v4v/+7+L//u/i//7v4v/+7+L//u/i//7v4v/+7+L/sZCO/wAAAAAAAAAAAAAAAAAA
AACxkI7//+3d///t3f//7d3//+3d///t3f//7d3//+3d///t3f//7d3//+3d/7GQjv8AAAAAAAAAAAAA
AAAAAAAAsZCO///r2f//69n//+vZ///r2f//69n//+vZ/9PBsf/TwbH/08Gx/9PBsf+xkI7/AAAAAAAA
AAAAAAAAAAAAALGQjv//6dT//+nU///p1P//6dT//+nU///p1P+1oZP/sqCS/7Gfkf+wnpD/sZCO/wAA
AAAAAAAAAAAAAAAAAACxkI7//+bP///mz///5s///+bP///mz///5s//nIt+/5yLfv+ci37/nIt+/7GQ
jv8AAAAAAAAAAAAAAAAAAAAAsZCO///jy///48v//+PL///jy///48v/uqaX//r28P/69vD/3s/O/7GQ
jv8AAAAAAAAAAAAAAAAAAAAAAAAAALGQjv//4cb//+HG///hxv//4cb//+HG/7qml//69vD/1cC3/7GQ
jv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxkI7//97C///ewv//3sL//97C///ewv+6ppf/1cC3/7GQ
jv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZCO/7GQjv+xkI7/sZCO/7GQjv+xkI7/sZCO/7GQ
jv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD
AADAAwAAwAMAAMADAADABwAAwA8AAMAfAADAPwAA
</value>
</data>
<data name="help" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAA4AAAAWAAAAFcAAAA2AAAABQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAADAYEAIZJLADtgEwA/5hZAP+WVwD/e0YA/0QnAOsFAwCDAAAACwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAIzEfANqtawD/wHQA/7lrAP+1ZwD/tGYA/7VnAP+2aAD/nlkA/ysY
ANcAAAAhAAAAAAAAAAAAAAAAAAAAETcjAN3FewD/vnEA/7VmAP+0ZgD/27aH/9+9kv+0ZgD/tGYA/7Zn
AP+vYwD/LxoA2wAAAA8AAAAAAAAAAAwIAJS8eAD/wnYA/7lrAP+5awD/uWsA//Dfyf/06dn/uWsA/7lr
AP+5awD/uGoA/6RcAP8KBQCSAAAAAAAAAAxdPQD1zoQA/75xAP+9cQD/vXEA/71xAP/KjjT/y440/71x
AP+9cQD/vXEA/71xAP+4agD/UC0A9AAAAAsAAABCmWUA/8uBAP/CdgD/wnYA/8J2AP/CdgD/7de0//jv
4//EfAn/wnYA/8J2AP/CdgD/vXAA/4NLAP8AAABCAAAAWrF2AP/NgwD/x3wA/8d8AP/HfAD/x3wA/9ae
Qv/9+vX/9OXO/82JGv/HfAD/x3wA/8J2AP+YWAD/AAAAWgAAAFuxdgD/0okA/8yCAP/MggD/zIMC/8yD
Af/MggD/1psz//78+v/v2LD/zIIA/8yCAP/FeQD/mlsA/wAAAFoAAABEmGMA/9iQAP/RhwD/0YcA//Xm
yv/58N//0YkD/9GJBP/79u3/9urS/9GHAP/RhwD/w3cA/4hRAP8AAABCAAAADVg2APXclQD/148A/9WN
AP/ov3D///////bny//26M3//////+rGgP/VjQD/z4UA/8N3AP9UMgD1AAAADAAAAAAKBQCVvnsA/9yV
AP/akgD/2pIA/+e5Wv/y2qf/8tij/+e6XP/akwH/04sA/8h8AP+zbgD/CgUAlQAAAAAAAAAAAAAAETId
AN7QiQD/3JUA/9uTAP/blAD/3JUA/9uUAP/YkAD/0ogA/8yCAP/HfgD/Mx4A3gAAABEAAAAAAAAAAAAA
AAAAAAAkMBwA2bp6AP/dlgD/25QA/9ePAP/VjQD/1IwA/9aNAP+5eAD/MR4A2gAAACQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAwHBACFUDUA7JZnAP+7hAD/vIUA/5hpAP9SNgDsBwQAhgAAAAwAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAA3AAAAVwAAAFcAAAA3AAAABQAAAAAAAAAAAAAAAAAA
AAAAAAAA+B8AAOAHAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMAD
AADgBwAA+B8AAA==
</value>
</data>
<data name="zoom" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAfGhcTxyciHO4AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAGhcTx5GEd/+Yi3//Qzw18gAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACgiHO6Xin7/xr+3/720qv9NR0DyAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAA+RD0287uyqf/k4N3/x7+3/05HQfIAAAA8AAAAAAAAACMAAABMAAAASwAA
ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5OSEHzxr61/+Xi3v+9tKv/Lysm7SQgHMtiWlH/i4N5/4qB
eP9fV07+IB0ZxAAAADYAAAAAAAAAAAAAAAAAAAAAAAAAPk9IQfPGvrX/3djT/56TiP+4rZr/1Mmw/9zT
vv/c0r3/08iu/7armf9bU0v5AQEAUwAAAAAAAAAAAAAAAAAAAAAAAAA+NDAr7J2Sh/+9ro7/2MSM/+fa
sP/u5cX/7uTD/+bYrf/VwIj/vK6Q/1JMRvUAAAAjAAAAAAAAAAAAAAAAAAAAABcVFKmypZD/zrVr/+LR
kv/r36v/7uS2/+7ktf/r3qn/4M6O/8uyaf+uo5D/Dw4NmQAAAAAAAAAAAAAAAAAAAAFPS0bxuqVx/9W8
aP/j0YX/59eU/+nam//p2pv/59eT/+LPg//TuWX/uKV1/0RAPOMAAAAAAAAAAAAAAAAAAAAPaWNe/7ui
X//WvGP/4Mx3/+LPf//j0IH/4tCA/+HNev/eyG//0rZX/7igX/9eWlX+AAAAAAAAAAAAAAAAAAAABWVh
XPy9qHD/2sR1/+PQhP/l1Iv/5dWO/+TTiP/hzn3/3MVp/82wSf+0nV3/WVVS8wAAAAAAAAAAAAAAAAAA
AAA4NzXKvK2M/97Nj//m15r/6duf/+rcof/q3KH/6duf/+bXmf/dy43/vK6R/ywrKbsAAAAAAAAAAAAA
AAAAAAAAAQEBZ66pov/GtIX/7OK8/+/lv//w58D/8OfA/+/lv//s4bv/xLKG/6Wgm/8AAABYAAAAAAAA
AAAAAAAAAAAAAAAAAAYwLizQy8S7/8W2k//o3sH/+fXq//n16v/m3L7/xbaT/8nDvP8nJiTEAAAAAgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAHTMxL9TCvrn/08vA/8m8of/JvaL/1M3D/7+7t/8tKynMAAAAFgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBAQEdUA/Pc9wb235b25t+D49PMsDAwNuAAAABgAA
AAAAAAAAD/8AAAf/AAAD/wAAAQ8AAIADAADAAQAA4AAAAPAAAADgAAAA4AAAAOAAAADwAAAA8AAAAPAA
AAD4AQAA/AMAAA==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gdromexplorer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons\gdromexplorer.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="gdromexplorer2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons\gdromexplorer2.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,41 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Properties.Settings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.CodeDom.Compiler;
using System.Configuration;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace GDRomExplorer.Properties
{
[CompilerGenerated]
[GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed class Settings : ApplicationSettingsBase
{
private static Settings defaultInstance = (Settings) SettingsBase.Synchronized((SettingsBase) new Settings());
public static Settings Default => Settings.defaultInstance;
[DebuggerNonUserCode]
[DefaultSettingValue("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=982C3EY58BF8U")]
[ApplicationScopedSetting]
public string PayPalDonateUrl => (string) this[nameof (PayPalDonateUrl)];
[ApplicationScopedSetting]
[DebuggerNonUserCode]
[DefaultSettingValue("http://japanese-cake.livejournal.com/")]
public string BlogUrl => (string) this[nameof (BlogUrl)];
[UserScopedSetting]
[DebuggerNonUserCode]
[DefaultSettingValue("True")]
public bool ImageReaderComputePathTable
{
get => (bool) this[nameof (ImageReaderComputePathTable)];
set => this[nameof (ImageReaderComputePathTable)] = (object) value;
}
}
}

View File

@ -0,0 +1,284 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.Resources.Strings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Resources;
using System.Runtime.CompilerServices;
namespace GDRomExplorer.Resources
{
[DebuggerNonUserCode]
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[CompilerGenerated]
internal class Strings
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
internal Strings()
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (object.ReferenceEquals((object) Strings.resourceMan, (object) null))
Strings.resourceMan = new ResourceManager("GDRomExplorer.Resources.Strings", typeof (Strings).Assembly);
return Strings.resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get => Strings.resourceCulture;
set => Strings.resourceCulture = value;
}
internal static string ContextMenuItemConvertAudio => Strings.ResourceManager.GetString(nameof (ContextMenuItemConvertAudio), Strings.resourceCulture);
internal static string ContextMenuItemConvertGDDA => Strings.ResourceManager.GetString(nameof (ContextMenuItemConvertGDDA), Strings.resourceCulture);
internal static string ContextMenuItemCreateCUE => Strings.ResourceManager.GetString(nameof (ContextMenuItemCreateCUE), Strings.resourceCulture);
internal static string ContextMenuItemDecryptAndExtract => Strings.ResourceManager.GetString(nameof (ContextMenuItemDecryptAndExtract), Strings.resourceCulture);
internal static string ContextMenuItemExportForGDEmu => Strings.ResourceManager.GetString(nameof (ContextMenuItemExportForGDEmu), Strings.resourceCulture);
internal static string ContextMenuItemExtract => Strings.ResourceManager.GetString(nameof (ContextMenuItemExtract), Strings.resourceCulture);
internal static string ContextMenuItemExtractContent => Strings.ResourceManager.GetString(nameof (ContextMenuItemExtractContent), Strings.resourceCulture);
internal static string ContextMenuItemExtractIP => Strings.ResourceManager.GetString(nameof (ContextMenuItemExtractIP), Strings.resourceCulture);
internal static string ContextMenuItemGenerateSortFile => Strings.ResourceManager.GetString(nameof (ContextMenuItemGenerateSortFile), Strings.resourceCulture);
internal static string ContextMenuItemViewIP => Strings.ResourceManager.GetString(nameof (ContextMenuItemViewIP), Strings.resourceCulture);
internal static string ContextMenuItemViewPvd => Strings.ResourceManager.GetString(nameof (ContextMenuItemViewPvd), Strings.resourceCulture);
internal static string DESDecryptorSubTitle => Strings.ResourceManager.GetString(nameof (DESDecryptorSubTitle), Strings.resourceCulture);
internal static string DESDecryptorTitle => Strings.ResourceManager.GetString(nameof (DESDecryptorTitle), Strings.resourceCulture);
internal static string DESDescriptorTypeName => Strings.ResourceManager.GetString(nameof (DESDescriptorTypeName), Strings.resourceCulture);
internal static string DESEncryptorSubTitle => Strings.ResourceManager.GetString(nameof (DESEncryptorSubTitle), Strings.resourceCulture);
internal static string DESEncryptorTitle => Strings.ResourceManager.GetString(nameof (DESEncryptorTitle), Strings.resourceCulture);
internal static string DESEncryptorTypeName => Strings.ResourceManager.GetString(nameof (DESEncryptorTypeName), Strings.resourceCulture);
internal static string DESKeyFormButtonLabelDecrypt => Strings.ResourceManager.GetString(nameof (DESKeyFormButtonLabelDecrypt), Strings.resourceCulture);
internal static string DESKeyFormButtonLabelEncrypt => Strings.ResourceManager.GetString(nameof (DESKeyFormButtonLabelEncrypt), Strings.resourceCulture);
internal static string DESKeyFormButtonLabelExtractAndDecrypt => Strings.ResourceManager.GetString(nameof (DESKeyFormButtonLabelExtractAndDecrypt), Strings.resourceCulture);
internal static string DiscViewExplorerGroupLabelWithFormat => Strings.ResourceManager.GetString(nameof (DiscViewExplorerGroupLabelWithFormat), Strings.resourceCulture);
internal static string DiscViewListColumnFileName => Strings.ResourceManager.GetString(nameof (DiscViewListColumnFileName), Strings.resourceCulture);
internal static string DiscViewListColumnLBA => Strings.ResourceManager.GetString(nameof (DiscViewListColumnLBA), Strings.resourceCulture);
internal static string DiscViewListColumnModifiedDate => Strings.ResourceManager.GetString(nameof (DiscViewListColumnModifiedDate), Strings.resourceCulture);
internal static string DiscViewListColumnSize => Strings.ResourceManager.GetString(nameof (DiscViewListColumnSize), Strings.resourceCulture);
internal static string DiscViewListColumnSizeInBytes => Strings.ResourceManager.GetString(nameof (DiscViewListColumnSizeInBytes), Strings.resourceCulture);
internal static string DiscViewNoDiscTitle => Strings.ResourceManager.GetString(nameof (DiscViewNoDiscTitle), Strings.resourceCulture);
internal static string DiscViewOpenerButtonClose => Strings.ResourceManager.GetString(nameof (DiscViewOpenerButtonClose), Strings.resourceCulture);
internal static string DiscViewOpenerButtonOpen => Strings.ResourceManager.GetString(nameof (DiscViewOpenerButtonOpen), Strings.resourceCulture);
internal static string DiscViewOpenerButtonToolStripText => Strings.ResourceManager.GetString(nameof (DiscViewOpenerButtonToolStripText), Strings.resourceCulture);
internal static string DiscViewOpenerFileDialogTitle => Strings.ResourceManager.GetString(nameof (DiscViewOpenerFileDialogTitle), Strings.resourceCulture);
internal static string DiscViewOpenerImageLoadingMessage => Strings.ResourceManager.GetString(nameof (DiscViewOpenerImageLoadingMessage), Strings.resourceCulture);
internal static string DiscViewOpenerImageLoadingTitle => Strings.ResourceManager.GetString(nameof (DiscViewOpenerImageLoadingTitle), Strings.resourceCulture);
internal static string DiscViewOpenerInvalidInitialProgram => Strings.ResourceManager.GetString(nameof (DiscViewOpenerInvalidInitialProgram), Strings.resourceCulture);
internal static string DiscViewOpenerLabel => Strings.ResourceManager.GetString(nameof (DiscViewOpenerLabel), Strings.resourceCulture);
internal static string DiscViewOpenerNoFileSystemError => Strings.ResourceManager.GetString(nameof (DiscViewOpenerNoFileSystemError), Strings.resourceCulture);
internal static string DiscViewOpenerUnknownError => Strings.ResourceManager.GetString(nameof (DiscViewOpenerUnknownError), Strings.resourceCulture);
internal static string EditDiscMenuItemName => Strings.ResourceManager.GetString(nameof (EditDiscMenuItemName), Strings.resourceCulture);
internal static string EditSelectionMenuItemName => Strings.ResourceManager.GetString(nameof (EditSelectionMenuItemName), Strings.resourceCulture);
internal static string FbdConvertGddaTitle => Strings.ResourceManager.GetString(nameof (FbdConvertGddaTitle), Strings.resourceCulture);
internal static string FbdExtractFilesTitle => Strings.ResourceManager.GetString(nameof (FbdExtractFilesTitle), Strings.resourceCulture);
internal static string FileExtractorSubTitle => Strings.ResourceManager.GetString(nameof (FileExtractorSubTitle), Strings.resourceCulture);
internal static string FileExtractorTitle => Strings.ResourceManager.GetString(nameof (FileExtractorTitle), Strings.resourceCulture);
internal static string FileExtractorTypeName => Strings.ResourceManager.GetString(nameof (FileExtractorTypeName), Strings.resourceCulture);
internal static string FileScannerSubTitle => Strings.ResourceManager.GetString(nameof (FileScannerSubTitle), Strings.resourceCulture);
internal static string FileScannerTitle => Strings.ResourceManager.GetString(nameof (FileScannerTitle), Strings.resourceCulture);
internal static string FileScannerTypeName => Strings.ResourceManager.GetString(nameof (FileScannerTypeName), Strings.resourceCulture);
internal static string GDEmuExporterBinaryPatcherHint => Strings.ResourceManager.GetString(nameof (GDEmuExporterBinaryPatcherHint), Strings.resourceCulture);
internal static string GDEmuExporterDiscSectorEncoderHint => Strings.ResourceManager.GetString(nameof (GDEmuExporterDiscSectorEncoderHint), Strings.resourceCulture);
internal static string GDEmuExporterFileConflictQuestionContent => Strings.ResourceManager.GetString(nameof (GDEmuExporterFileConflictQuestionContent), Strings.resourceCulture);
internal static string GDEmuExporterFileConflictQuestionTitle => Strings.ResourceManager.GetString(nameof (GDEmuExporterFileConflictQuestionTitle), Strings.resourceCulture);
internal static string GDEmuExporterSubTitle => Strings.ResourceManager.GetString(nameof (GDEmuExporterSubTitle), Strings.resourceCulture);
internal static string GDEmuExporterTitle => Strings.ResourceManager.GetString(nameof (GDEmuExporterTitle), Strings.resourceCulture);
internal static string GDEmuExporterTypeName => Strings.ResourceManager.GetString(nameof (GDEmuExporterTypeName), Strings.resourceCulture);
internal static string GoToBlogLinkTitle => Strings.ResourceManager.GetString(nameof (GoToBlogLinkTitle), Strings.resourceCulture);
internal static string InitialProgramLoadingMessage => Strings.ResourceManager.GetString(nameof (InitialProgramLoadingMessage), Strings.resourceCulture);
internal static string InitialProgramLoadingTitle => Strings.ResourceManager.GetString(nameof (InitialProgramLoadingTitle), Strings.resourceCulture);
internal static string InvalidDateTimeText => Strings.ResourceManager.GetString(nameof (InvalidDateTimeText), Strings.resourceCulture);
internal static string MsgBoxAudioConverterError => Strings.ResourceManager.GetString(nameof (MsgBoxAudioConverterError), Strings.resourceCulture);
internal static string MsgBoxAudioConverterNoTrackWarning => Strings.ResourceManager.GetString(nameof (MsgBoxAudioConverterNoTrackWarning), Strings.resourceCulture);
internal static string MsgBoxAudioConverterTitle => Strings.ResourceManager.GetString(nameof (MsgBoxAudioConverterTitle), Strings.resourceCulture);
internal static string MsgBoxCueCreatorError => Strings.ResourceManager.GetString(nameof (MsgBoxCueCreatorError), Strings.resourceCulture);
internal static string MsgBoxCueCreatorSuccess => Strings.ResourceManager.GetString(nameof (MsgBoxCueCreatorSuccess), Strings.resourceCulture);
internal static string MsgBoxCueCreatorTitle => Strings.ResourceManager.GetString(nameof (MsgBoxCueCreatorTitle), Strings.resourceCulture);
internal static string MsgBoxGDEmuSettingsImageMissing => Strings.ResourceManager.GetString(nameof (MsgBoxGDEmuSettingsImageMissing), Strings.resourceCulture);
internal static string MsgBoxGDEmuSettingsOutputPathMissing => Strings.ResourceManager.GetString(nameof (MsgBoxGDEmuSettingsOutputPathMissing), Strings.resourceCulture);
internal static string MsgBoxImageOpenerBadFileExtensionErrorWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxImageOpenerBadFileExtensionErrorWithFormat), Strings.resourceCulture);
internal static string MsgBoxImageOpenerFileNotFoundErrorWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxImageOpenerFileNotFoundErrorWithFormat), Strings.resourceCulture);
internal static string MsgBoxImageOpenerTitle => Strings.ResourceManager.GetString(nameof (MsgBoxImageOpenerTitle), Strings.resourceCulture);
internal static string MsgBoxInitialProgramExtractionErrorWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramExtractionErrorWithFormat), Strings.resourceCulture);
internal static string MsgBoxInitialProgramExtractionSuccessWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramExtractionSuccessWithFormat), Strings.resourceCulture);
internal static string MsgBoxInitialProgramExtractionTitle => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramExtractionTitle), Strings.resourceCulture);
internal static string MsgBoxInitialProgramOpenerErrorWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramOpenerErrorWithFormat), Strings.resourceCulture);
internal static string MsgBoxInitialProgramOpenerSuccessWithFormat => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramOpenerSuccessWithFormat), Strings.resourceCulture);
internal static string MsgBoxInitialProgramOpenerTitle => Strings.ResourceManager.GetString(nameof (MsgBoxInitialProgramOpenerTitle), Strings.resourceCulture);
internal static string MsgBoxSortFileCreationError => Strings.ResourceManager.GetString(nameof (MsgBoxSortFileCreationError), Strings.resourceCulture);
internal static string MsgBoxSortFileCreationSuccess => Strings.ResourceManager.GetString(nameof (MsgBoxSortFileCreationSuccess), Strings.resourceCulture);
internal static string MsgBoxSortFileCreationTitle => Strings.ResourceManager.GetString(nameof (MsgBoxSortFileCreationTitle), Strings.resourceCulture);
internal static string MsgBoxToolStripMenuSelectedFiles => Strings.ResourceManager.GetString(nameof (MsgBoxToolStripMenuSelectedFiles), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolOfdDecFilter => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolOfdDecFilter), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolOfdDecTitle => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolOfdDecTitle), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolOfdEncFilter => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolOfdEncFilter), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolOfdEncTitle => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolOfdEncTitle), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolSfdDecFilter => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolSfdDecFilter), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolSfdDecTitle => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolSfdDecTitle), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolSfdEncFilter => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolSfdEncFilter), Strings.resourceCulture);
internal static string NaomiEncryptDecryptToolSfdEncTitle => Strings.ResourceManager.GetString(nameof (NaomiEncryptDecryptToolSfdEncTitle), Strings.resourceCulture);
internal static string OfdConvertGddaFilter => Strings.ResourceManager.GetString(nameof (OfdConvertGddaFilter), Strings.resourceCulture);
internal static string OfdConvertGddaTitle => Strings.ResourceManager.GetString(nameof (OfdConvertGddaTitle), Strings.resourceCulture);
internal static string OfdInitialProgramFilter => Strings.ResourceManager.GetString(nameof (OfdInitialProgramFilter), Strings.resourceCulture);
internal static string OfdInitialProgramTitle => Strings.ResourceManager.GetString(nameof (OfdInitialProgramTitle), Strings.resourceCulture);
internal static string Raw2WavConverterSubTitle => Strings.ResourceManager.GetString(nameof (Raw2WavConverterSubTitle), Strings.resourceCulture);
internal static string Raw2WavConverterTitle => Strings.ResourceManager.GetString(nameof (Raw2WavConverterTitle), Strings.resourceCulture);
internal static string Raw2WavConverterTypeName => Strings.ResourceManager.GetString(nameof (Raw2WavConverterTypeName), Strings.resourceCulture);
internal static string SettingsInfoPathTable => Strings.ResourceManager.GetString(nameof (SettingsInfoPathTable), Strings.resourceCulture);
internal static string SettingsSaved => Strings.ResourceManager.GetString(nameof (SettingsSaved), Strings.resourceCulture);
internal static string SfdCddaDefaultFileName => Strings.ResourceManager.GetString(nameof (SfdCddaDefaultFileName), Strings.resourceCulture);
internal static string SfdCddaFilter => Strings.ResourceManager.GetString(nameof (SfdCddaFilter), Strings.resourceCulture);
internal static string SfdCddaTitle => Strings.ResourceManager.GetString(nameof (SfdCddaTitle), Strings.resourceCulture);
internal static string SfdCueSheetFilter => Strings.ResourceManager.GetString(nameof (SfdCueSheetFilter), Strings.resourceCulture);
internal static string SfdCueSheetTitle => Strings.ResourceManager.GetString(nameof (SfdCueSheetTitle), Strings.resourceCulture);
internal static string SfdExtractFilter => Strings.ResourceManager.GetString(nameof (SfdExtractFilter), Strings.resourceCulture);
internal static string SfdExtractTitle => Strings.ResourceManager.GetString(nameof (SfdExtractTitle), Strings.resourceCulture);
internal static string SfdInitialProgramFilter => Strings.ResourceManager.GetString(nameof (SfdInitialProgramFilter), Strings.resourceCulture);
internal static string SfdInitialProgramTitle => Strings.ResourceManager.GetString(nameof (SfdInitialProgramTitle), Strings.resourceCulture);
internal static string SfdSortFileFilter => Strings.ResourceManager.GetString(nameof (SfdSortFileFilter), Strings.resourceCulture);
internal static string SfdSortFileTitle => Strings.ResourceManager.GetString(nameof (SfdSortFileTitle), Strings.resourceCulture);
internal static string SortFileOptionsHint => Strings.ResourceManager.GetString(nameof (SortFileOptionsHint), Strings.resourceCulture);
internal static string StatusLabelImageError => Strings.ResourceManager.GetString(nameof (StatusLabelImageError), Strings.resourceCulture);
internal static string StatusLabelImageLoaded => Strings.ResourceManager.GetString(nameof (StatusLabelImageLoaded), Strings.resourceCulture);
internal static string StatusLabelImageNotLoaded => Strings.ResourceManager.GetString(nameof (StatusLabelImageNotLoaded), Strings.resourceCulture);
internal static string ToolTipDirectories => Strings.ResourceManager.GetString(nameof (ToolTipDirectories), Strings.resourceCulture);
internal static string ToolTipDirectory => Strings.ResourceManager.GetString(nameof (ToolTipDirectory), Strings.resourceCulture);
internal static string ToolTipDirectoryContentWithFormat => Strings.ResourceManager.GetString(nameof (ToolTipDirectoryContentWithFormat), Strings.resourceCulture);
internal static string ToolTipFile => Strings.ResourceManager.GetString(nameof (ToolTipFile), Strings.resourceCulture);
internal static string ToolTipFiles => Strings.ResourceManager.GetString(nameof (ToolTipFiles), Strings.resourceCulture);
internal static string ToolTipFileSizeWithFormat => Strings.ResourceManager.GetString(nameof (ToolTipFileSizeWithFormat), Strings.resourceCulture);
internal static string ToolTipInvalidFileIdentifier => Strings.ResourceManager.GetString(nameof (ToolTipInvalidFileIdentifier), Strings.resourceCulture);
internal static string ToolTipMainBinaryWithFormat => Strings.ResourceManager.GetString(nameof (ToolTipMainBinaryWithFormat), Strings.resourceCulture);
}
}

View File

@ -0,0 +1,479 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="DiscViewOpenerButtonOpen" xml:space="preserve">
<value>&amp;Open</value>
</data>
<data name="NaomiEncryptDecryptToolSfdDecTitle" xml:space="preserve">
<value>Save decrypted Naomi binary file as...</value>
</data>
<data name="ToolTipDirectories" xml:space="preserve">
<value>folders</value>
</data>
<data name="ContextMenuItemGenerateSortFile" xml:space="preserve">
<value>Generate a sort file</value>
</data>
<data name="MsgBoxImageOpenerBadFileExtensionErrorWithFormat" xml:space="preserve">
<value>The extension "{0}" is not a valid extension.</value>
</data>
<data name="FileExtractorSubTitle" xml:space="preserve">
<value>Extracting file</value>
</data>
<data name="GDEmuExporterBinaryPatcherHint" xml:space="preserve">
<value>Applying patches...</value>
</data>
<data name="SettingsInfoPathTable" xml:space="preserve">
<value>Computing the path table rather than parsing it improves the compatibility.</value>
</data>
<data name="MsgBoxGDEmuSettingsOutputPathMissing" xml:space="preserve">
<value>Select an output folder.</value>
</data>
<data name="StatusLabelImageLoaded" xml:space="preserve">
<value>Image successfully loaded.</value>
</data>
<data name="SortFileOptionsHint" xml:space="preserve">
<value>The files will be sorted with the highest weights first (lowest LBA, i.e. center of the disc) and lowest last. You can change the lowest weight if you plan to add files that you want to be located in the most outer part of the disc.</value>
</data>
<data name="NaomiEncryptDecryptToolOfdDecTitle" xml:space="preserve">
<value>Select a Naomi binary to decrypt...</value>
</data>
<data name="NaomiEncryptDecryptToolOfdDecFilter" xml:space="preserve">
<value>Encrypted binary file|*.bin|Encrypted data file|*.dat|All files|*.*</value>
</data>
<data name="DiscViewExplorerGroupLabelWithFormat" xml:space="preserve">
<value>Software Name: {0}</value>
</data>
<data name="DESKeyFormButtonLabelEncrypt" xml:space="preserve">
<value>&amp;Encrypt</value>
</data>
<data name="SfdSortFileTitle" xml:space="preserve">
<value>Save sort file as...</value>
</data>
<data name="NaomiEncryptDecryptToolOfdEncFilter" xml:space="preserve">
<value>Decrypted data file|*.dat|Decrypted binary file|*.bin|All files|*.*</value>
</data>
<data name="NaomiEncryptDecryptToolSfdDecFilter" xml:space="preserve">
<value>Data file|*.dat|Binary file|*.bin|All files|*.*</value>
</data>
<data name="MsgBoxCueCreatorError" xml:space="preserve">
<value>An error occured while creating the cue sheet.</value>
</data>
<data name="MsgBoxCueCreatorTitle" xml:space="preserve">
<value>CUE Sheet Creator</value>
</data>
<data name="DiscViewListColumnModifiedDate" xml:space="preserve">
<value>Modified</value>
</data>
<data name="DESDescriptorTypeName" xml:space="preserve">
<value>DES decryption</value>
</data>
<data name="MsgBoxInitialProgramOpenerSuccessWithFormat" xml:space="preserve">
<value>The {0} file has been successfully read.</value>
</data>
<data name="DiscViewOpenerFileDialogTitle" xml:space="preserve">
<value>Open a GDROM Image file...</value>
</data>
<data name="ContextMenuItemExportForGDEmu" xml:space="preserve">
<value>Export for GDEMU...</value>
</data>
<data name="OfdConvertGddaFilter" xml:space="preserve">
<value>Raw audio file|*.raw|All files|*.*</value>
</data>
<data name="DiscViewOpenerButtonClose" xml:space="preserve">
<value>&amp;Close</value>
</data>
<data name="InvalidDateTimeText" xml:space="preserve">
<value>N/A</value>
</data>
<data name="GDEmuExporterTitle" xml:space="preserve">
<value>GDI to GDEMU Exporter</value>
</data>
<data name="GDEmuExporterTypeName" xml:space="preserve">
<value>export</value>
</data>
<data name="SfdInitialProgramTitle" xml:space="preserve">
<value>Save initial program file as...</value>
</data>
<data name="SfdSortFileFilter" xml:space="preserve">
<value>Sort file|*.str|Sort file|*.txt</value>
</data>
<data name="ToolTipFiles" xml:space="preserve">
<value>files</value>
</data>
<data name="MsgBoxImageOpenerFileNotFoundErrorWithFormat" xml:space="preserve">
<value>The file "{0}" does not exist.</value>
</data>
<data name="SettingsSaved" xml:space="preserve">
<value>Settings saved!</value>
</data>
<data name="MsgBoxInitialProgramOpenerTitle" xml:space="preserve">
<value>IP.BIN/IP0000.BIN File Opener</value>
</data>
<data name="ContextMenuItemCreateCUE" xml:space="preserve">
<value>Create CUE sheet</value>
</data>
<data name="DiscViewListColumnFileName" xml:space="preserve">
<value>Filename</value>
</data>
<data name="DiscViewListColumnLBA" xml:space="preserve">
<value>LBA</value>
</data>
<data name="FileScannerTitle" xml:space="preserve">
<value>File Scanner</value>
</data>
<data name="GDEmuExporterFileConflictQuestionContent" xml:space="preserve">
<value>The following files will be overridden in the specified ouput:
{0}
Do you want to continue?</value>
</data>
<data name="DiscViewOpenerLabel" xml:space="preserve">
<value>Disc Image</value>
</data>
<data name="DESKeyFormButtonLabelDecrypt" xml:space="preserve">
<value>&amp;Decrypt</value>
</data>
<data name="MsgBoxInitialProgramExtractionSuccessWithFormat" xml:space="preserve">
<value>The {0} file has been successfully extracted.</value>
</data>
<data name="InitialProgramLoadingTitle" xml:space="preserve">
<value>Loading IP.BIN/IP0000.BIN file</value>
</data>
<data name="DESDecryptorTitle" xml:space="preserve">
<value>NAOMI Decryptor</value>
</data>
<data name="FileExtractorTitle" xml:space="preserve">
<value>File extractor</value>
</data>
<data name="FileExtractorTypeName" xml:space="preserve">
<value>extraction</value>
</data>
<data name="SfdCddaTitle" xml:space="preserve">
<value>Save CDDA file as...</value>
</data>
<data name="MsgBoxInitialProgramExtractionTitle" xml:space="preserve">
<value>InitialProgram extractor</value>
</data>
<data name="ContextMenuItemExtract" xml:space="preserve">
<value>Extract {0} to...</value>
</data>
<data name="SfdCddaDefaultFileName" xml:space="preserve">
<value>track.wav</value>
</data>
<data name="DiscViewOpenerButtonToolStripText" xml:space="preserve">
<value>Click here to open a disc image</value>
</data>
<data name="Raw2WavConverterSubTitle" xml:space="preserve">
<value>Converting GDDA to WAVE</value>
</data>
<data name="ContextMenuItemViewPvd" xml:space="preserve">
<value>View Primary Volume Descriptor</value>
</data>
<data name="DESEncryptorSubTitle" xml:space="preserve">
<value>Encrypting file</value>
</data>
<data name="SfdExtractTitle" xml:space="preserve">
<value>Extract to...</value>
</data>
<data name="ToolTipFileSizeWithFormat" xml:space="preserve">
<value>Size: {0}</value>
</data>
<data name="MsgBoxToolStripMenuSelectedFiles" xml:space="preserve">
<value>selected files</value>
</data>
<data name="FileScannerTypeName" xml:space="preserve">
<value>scanner</value>
</data>
<data name="MsgBoxSortFileCreationSuccess" xml:space="preserve">
<value>The sort file has been successfully created.</value>
</data>
<data name="GDEmuExporterSubTitle" xml:space="preserve">
<value>Exporting GDI file for GDEMU</value>
</data>
<data name="DiscViewOpenerImageLoadingTitle" xml:space="preserve">
<value>Loading image file</value>
</data>
<data name="OfdInitialProgramTitle" xml:space="preserve">
<value>Open IP.BIN/IP0000.BIN file</value>
</data>
<data name="StatusLabelImageError" xml:space="preserve">
<value>Unable to open image: {0}</value>
</data>
<data name="ContextMenuItemDecryptAndExtract" xml:space="preserve">
<value>Decrypt and Extract {0} to...</value>
</data>
<data name="NaomiEncryptDecryptToolSfdEncTitle" xml:space="preserve">
<value>Save encrypted Naomi binary file as...</value>
</data>
<data name="DESEncryptorTypeName" xml:space="preserve">
<value>DES encryption</value>
</data>
<data name="ToolTipInvalidFileIdentifier" xml:space="preserve">
<value>The filename has been changed to match the d-character encoding.</value>
</data>
<data name="FbdExtractFilesTitle" xml:space="preserve">
<value>Extract files to...</value>
</data>
<data name="SfdInitialProgramFilter" xml:space="preserve">
<value>Binary file|*.bin|All files|*.*</value>
</data>
<data name="ContextMenuItemExtractIP" xml:space="preserve">
<value>Extract Initial Program as a file ({0}) to...</value>
</data>
<data name="EditDiscMenuItemName" xml:space="preserve">
<value>Disc</value>
</data>
<data name="DiscViewOpenerUnknownError" xml:space="preserve">
<value>An unknown error has occured</value>
</data>
<data name="GDEmuExporterDiscSectorEncoderHint" xml:space="preserve">
<value>Generating EDC and ECC data...</value>
</data>
<data name="OfdInitialProgramFilter" xml:space="preserve">
<value>Binary file|*.bin|All files|*.*</value>
</data>
<data name="GDEmuExporterFileConflictQuestionTitle" xml:space="preserve">
<value>File conflict</value>
</data>
<data name="ContextMenuItemExtractContent" xml:space="preserve">
<value>Extract content of {0} to...</value>
</data>
<data name="DiscViewListColumnSizeInBytes" xml:space="preserve">
<value>Size (Bytes)</value>
</data>
<data name="DiscViewNoDiscTitle" xml:space="preserve">
<value>N/A</value>
</data>
<data name="GoToBlogLinkTitle" xml:space="preserve">
<value>Visit my blog</value>
</data>
<data name="MsgBoxInitialProgramOpenerErrorWithFormat" xml:space="preserve">
<value>Unable to open the file: {0}</value>
</data>
<data name="DiscViewOpenerNoFileSystemError" xml:space="preserve">
<value>No valid file-system found</value>
</data>
<data name="ContextMenuItemViewIP" xml:space="preserve">
<value>View Initial Program</value>
</data>
<data name="Raw2WavConverterTypeName" xml:space="preserve">
<value>audio conversion</value>
</data>
<data name="MsgBoxSortFileCreationTitle" xml:space="preserve">
<value>Sort file creator</value>
</data>
<data name="MsgBoxSortFileCreationError" xml:space="preserve">
<value>An error occured while creating the sort file.</value>
</data>
<data name="DESEncryptorTitle" xml:space="preserve">
<value>NAOMI Encryptor</value>
</data>
<data name="ToolTipDirectoryContentWithFormat" xml:space="preserve">
<value>Contains: {0} {1}, {2} {3}</value>
</data>
<data name="DiscViewOpenerImageLoadingMessage" xml:space="preserve">
<value>Please wait while loading image content...</value>
</data>
<data name="MsgBoxAudioConverterTitle" xml:space="preserve">
<value>Audio converter</value>
</data>
<data name="MsgBoxAudioConverterError" xml:space="preserve">
<value>Cannot convert no audio tracks.</value>
</data>
<data name="MsgBoxInitialProgramExtractionErrorWithFormat" xml:space="preserve">
<value>An error occured while extracting the {0} file.</value>
</data>
<data name="MsgBoxCueCreatorSuccess" xml:space="preserve">
<value>The cue file has been successfully created.</value>
</data>
<data name="SfdCddaFilter" xml:space="preserve">
<value>WAVE file|*.wav|All files|*.*</value>
</data>
<data name="DESDecryptorSubTitle" xml:space="preserve">
<value>Decrypting file</value>
</data>
<data name="ToolTipFile" xml:space="preserve">
<value>file</value>
</data>
<data name="SfdExtractFilter" xml:space="preserve">
<value>All files|*.*</value>
</data>
<data name="MsgBoxGDEmuSettingsImageMissing" xml:space="preserve">
<value>Select a GDI file.</value>
</data>
<data name="FileScannerSubTitle" xml:space="preserve">
<value>Scanning file</value>
</data>
<data name="InitialProgramLoadingMessage" xml:space="preserve">
<value>Please wait while loading the file...</value>
</data>
<data name="MsgBoxAudioConverterNoTrackWarning" xml:space="preserve">
<value>There isn't any audio tracks to convert. Are some tracks missing?</value>
</data>
<data name="DESKeyFormButtonLabelExtractAndDecrypt" xml:space="preserve">
<value>&amp;Extract and decrypt</value>
</data>
<data name="StatusLabelImageNotLoaded" xml:space="preserve">
<value>No image loaded</value>
</data>
<data name="NaomiEncryptDecryptToolOfdEncTitle" xml:space="preserve">
<value>Select a Naomi binary to encrypt...</value>
</data>
<data name="DiscViewOpenerInvalidInitialProgram" xml:space="preserve">
<value>The boot sector contains an invalid IP ({0})</value>
</data>
<data name="OfdConvertGddaTitle" xml:space="preserve">
<value>Select GDDA files to convert...</value>
</data>
<data name="SfdCueSheetTitle" xml:space="preserve">
<value>Save CUE (*.cue)</value>
</data>
<data name="NaomiEncryptDecryptToolSfdEncFilter" xml:space="preserve">
<value>Binary file|*.bin|Data file|*.dat|All files|*.*</value>
</data>
<data name="EditSelectionMenuItemName" xml:space="preserve">
<value>Selection</value>
</data>
<data name="SfdCueSheetFilter" xml:space="preserve">
<value>cue sheet|*.cue|All files|*.*</value>
</data>
<data name="ToolTipDirectory" xml:space="preserve">
<value>folder</value>
</data>
<data name="Raw2WavConverterTitle" xml:space="preserve">
<value>Audio Converter</value>
</data>
<data name="FbdConvertGddaTitle" xml:space="preserve">
<value>Convert GDDA to...</value>
</data>
<data name="ContextMenuItemConvertGDDA" xml:space="preserve">
<value>Convert GDDA...</value>
</data>
<data name="MsgBoxImageOpenerTitle" xml:space="preserve">
<value>Image opener</value>
</data>
<data name="ContextMenuItemConvertAudio" xml:space="preserve">
<value>Convert {0} to wave...</value>
</data>
<data name="DiscViewListColumnSize" xml:space="preserve">
<value>Size</value>
</data>
<data name="ToolTipMainBinaryWithFormat" xml:space="preserve">
<value>{0} (Main binary)</value>
</data>
</root>

BIN
Explorer/Resources/file.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

View File

@ -0,0 +1,145 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.DataObjectEx
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Security.Permissions;
using System.Windows.Forms;
namespace GDRomExplorer.ShellDataTransfert
{
public class DataObjectEx : DataObject, System.Runtime.InteropServices.ComTypes.IDataObject
{
private static readonly TYMED[] ALLOWED_TYMEDS = new TYMED[5]
{
TYMED.TYMED_HGLOBAL,
TYMED.TYMED_ISTREAM,
TYMED.TYMED_ENHMF,
TYMED.TYMED_MFPICT,
TYMED.TYMED_GDI
};
private FileDescriptor[] fileDescriptors;
private int fileDescriptorIndex;
public void SetItems(FileDescriptor[] FileDescriptors)
{
this.fileDescriptors = FileDescriptors;
this.SetData("FileGroupDescriptorW", (object) null);
this.SetData("FileContents", (object) null);
this.SetData("Performed DropEffect", (object) null);
}
public override object GetData(string format, bool autoConvert)
{
if (string.Compare(format, "FileGroupDescriptorW", StringComparison.OrdinalIgnoreCase) == 0 && this.fileDescriptors != null)
this.SetData("FileGroupDescriptorW", (object) this.GetFileDescriptor(this.fileDescriptors));
else if (string.Compare(format, "FileContents", StringComparison.OrdinalIgnoreCase) == 0)
this.SetData("FileContents", (object) this.GetFileContents(this.fileDescriptors, this.fileDescriptorIndex));
else
string.Compare(format, "Performed DropEffect", StringComparison.OrdinalIgnoreCase);
return base.GetData(format, autoConvert);
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
void System.Runtime.InteropServices.ComTypes.IDataObject.GetData(
ref FORMATETC formatetc,
out STGMEDIUM medium)
{
if ((int) formatetc.cfFormat == (int) (short) DataFormats.GetFormat("FileContents").Id)
this.fileDescriptorIndex = formatetc.lindex;
medium = new STGMEDIUM();
if (DataObjectEx.GetTymedUseable(formatetc.tymed))
{
if ((formatetc.tymed & TYMED.TYMED_ISTREAM) != TYMED.TYMED_NULL)
{
medium.tymed = TYMED.TYMED_ISTREAM;
medium.unionmember = IntPtr.Zero;
System.Runtime.InteropServices.ComTypes.IStream fileContents = this.GetFileContents(this.fileDescriptors, this.fileDescriptorIndex);
if (fileContents == null)
return;
medium.unionmember = Marshal.GetComInterfaceForObject((object) fileContents, typeof (System.Runtime.InteropServices.ComTypes.IStream));
}
else
{
medium.tymed = formatetc.tymed;
((System.Runtime.InteropServices.ComTypes.IDataObject) this).GetDataHere(ref formatetc, ref medium);
}
}
else
Marshal.ThrowExceptionForHR(-2147221399);
}
private static bool GetTymedUseable(TYMED tymed)
{
for (int index = 0; index < DataObjectEx.ALLOWED_TYMEDS.Length; ++index)
{
if ((tymed & DataObjectEx.ALLOWED_TYMEDS[index]) != TYMED.TYMED_NULL)
return true;
}
return false;
}
private MemoryStream GetFileDescriptor(FileDescriptor[] FileDescriptors)
{
MemoryStream memoryStream = new MemoryStream();
memoryStream.Write(BitConverter.GetBytes(FileDescriptors.Length), 0, 4);
DataObjectEx.FILEDESCRIPTOR filedescriptor = new DataObjectEx.FILEDESCRIPTOR();
foreach (FileDescriptor fileDescriptor in FileDescriptors)
{
filedescriptor.cFileName = fileDescriptor.FileName;
filedescriptor.dwFlags = 16384U;
filedescriptor.dwFlags |= 68U;
filedescriptor.dwFlags |= 56U;
filedescriptor.dwFileAttributes = fileDescriptor.IsDirectory ? 16U : 128U;
long fileTime = fileDescriptor.WriteTime.ToFileTime();
System.Runtime.InteropServices.ComTypes.FILETIME filetime = new System.Runtime.InteropServices.ComTypes.FILETIME()
{
dwLowDateTime = (int) (fileTime & (long) uint.MaxValue),
dwHighDateTime = (int) (fileTime >> 32)
};
filedescriptor.ftLastWriteTime = filetime;
filedescriptor.ftCreationTime = filetime;
filedescriptor.nFileSizeHigh = (uint) (fileDescriptor.FileSize >> 32);
filedescriptor.nFileSizeLow = (uint) ((ulong) fileDescriptor.FileSize & (ulong) uint.MaxValue);
int length = Marshal.SizeOf((object) filedescriptor);
IntPtr num = Marshal.AllocHGlobal(length);
Marshal.StructureToPtr((object) filedescriptor, num, true);
byte[] numArray = new byte[length];
Marshal.Copy(num, numArray, 0, length);
Marshal.FreeHGlobal(num);
memoryStream.Write(numArray, 0, numArray.Length);
}
return memoryStream;
}
private System.Runtime.InteropServices.ComTypes.IStream GetFileContents(
FileDescriptor[] FileDescriptors,
int FileNumber)
{
return FileNumber >= FileDescriptors.Length || FileDescriptors[FileNumber].Data == null ? (System.Runtime.InteropServices.ComTypes.IStream) null : (System.Runtime.InteropServices.ComTypes.IStream) new StreamWrapper(FileDescriptors[FileNumber].Data, FileDescriptors[FileNumber].FileName);
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct FILEDESCRIPTOR
{
public uint dwFlags;
public Guid clsid;
public Size sizel;
public Point pointl;
public uint dwFileAttributes;
public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
public uint nFileSizeHigh;
public uint nFileSizeLow;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string cFileName;
}
}
}

View File

@ -0,0 +1,24 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.FileDescriptor
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
using System.IO;
namespace GDRomExplorer.ShellDataTransfert
{
public class FileDescriptor
{
public string FileName { get; set; }
public long FileSize { get; set; }
public DateTime WriteTime { get; set; }
public Stream Data { get; set; }
public bool IsDirectory { get; set; }
}
}

View File

@ -0,0 +1,112 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.FileDescriptorFactory
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using ImageReader.ISO9660.DirectoryRecords;
using ImageReader.Stream;
using SEGATools.DiscFileSystem;
using SEGATools.Security;
using SEGATools.VirtualFile;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace GDRomExplorer.ShellDataTransfert
{
public class FileDescriptorFactory
{
private static readonly string DEFAULT_FILENAME = "no_name";
public static FileDescriptor createFromVirtualFile(IVirtualFile virtualFile)
{
FileDescriptor fileDescriptor = new FileDescriptor();
System.IO.Stream fileInputStream = virtualFile.FileInputStream;
fileDescriptor.FileName = virtualFile.VirtualName;
fileDescriptor.WriteTime = DateTime.Now;
fileDescriptor.IsDirectory = false;
fileDescriptor.Data = fileInputStream;
fileDescriptor.FileSize = fileInputStream.Length;
return fileDescriptor;
}
private static FileDescriptor createFromDirectoryRecord(
DirectoryRecord directoryRecord,
IDiscFileSystem discFileSystem,
string directoryRecordFileName)
{
string str = directoryRecordFileName;
if (string.Empty.Equals(directoryRecordFileName))
str = FileDescriptorFactory.DEFAULT_FILENAME;
FileDescriptor fileDescriptor = new FileDescriptor();
DiscSectorStream forDirectoryRecord = discFileSystem.GetDiscStreamForDirectoryRecord(directoryRecord);
fileDescriptor.FileName = str;
fileDescriptor.WriteTime = directoryRecord.RecordingDateTime.HasValue ? directoryRecord.RecordingDateTime.Value : DateTime.Now;
fileDescriptor.IsDirectory = directoryRecord.IsDirectory;
fileDescriptor.Data = (System.IO.Stream) forDirectoryRecord;
fileDescriptor.FileSize = directoryRecord.IsDirectory ? 0L : forDirectoryRecord.Length;
return fileDescriptor;
}
public static FileDescriptor[] createFromDirectoryRecordTree(
DirectoryRecord directoryRecord,
IDiscFileSystem discFileSystem)
{
List<FileDescriptor> fileDescriptorList = new List<FileDescriptor>();
int count = 1;
if (!directoryRecord.IsRoot)
{
count = directoryRecord.ParentDirectory.FullPath.Length;
if (!directoryRecord.ParentDirectory.IsRoot)
++count;
fileDescriptorList.Add(FileDescriptorFactory.createFromDirectoryRecord(directoryRecord, discFileSystem, directoryRecord.Name));
}
foreach (DirectoryRecord allSubDirectory in directoryRecord.GetAllSubDirectories())
{
string directoryRecordFileName = allSubDirectory.FullPath.Remove(0, count);
fileDescriptorList.Add(FileDescriptorFactory.createFromDirectoryRecord(allSubDirectory, discFileSystem, directoryRecordFileName));
}
return fileDescriptorList.ToArray();
}
public static DataObject createDataObject(object Handle, IDiscFileSystem Disc)
{
DataObjectEx dataObjectEx = new DataObjectEx();
FileDescriptor[] FileDescriptors;
switch (Handle)
{
case DirectoryRecord _:
FileDescriptors = FileDescriptorFactory.createFromDirectoryRecordTree(Handle as DirectoryRecord, Disc);
break;
case InitialProgramExtended _:
FileDescriptors = new FileDescriptor[1]
{
FileDescriptorFactory.createFromVirtualFile((IVirtualFile) VirtualFileFactory.createVirtualFile(Handle as InitialProgramExtended))
};
break;
case IVirtualFile _:
FileDescriptors = new FileDescriptor[1]
{
FileDescriptorFactory.createFromVirtualFile(Handle as IVirtualFile)
};
break;
case IList<DirectoryRecord> _:
IList<DirectoryRecord> directoryRecordList = Handle as IList<DirectoryRecord>;
List<FileDescriptor> fileDescriptorList = new List<FileDescriptor>(directoryRecordList.Count);
foreach (DirectoryRecord directoryRecord in (IEnumerable<DirectoryRecord>) directoryRecordList)
{
FileDescriptor[] directoryRecordTree = FileDescriptorFactory.createFromDirectoryRecordTree(directoryRecord, Disc);
fileDescriptorList.AddRange((IEnumerable<FileDescriptor>) ((IEnumerable<FileDescriptor>) directoryRecordTree).ToList<FileDescriptor>());
}
FileDescriptors = fileDescriptorList.ToArray();
break;
default:
return (DataObject) null;
}
dataObjectEx.SetItems(FileDescriptors);
return (DataObject) dataObjectEx;
}
}
}

View File

@ -0,0 +1,15 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.LOCKTYPE
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer.ShellDataTransfert
{
public enum LOCKTYPE
{
LOCK_WRITE = 1,
LOCK_EXCLUSIVE = 2,
LOCK_ONLYONCE = 4,
}
}

View File

@ -0,0 +1,41 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.NativeMethods
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
using System.Runtime.InteropServices;
namespace GDRomExplorer.ShellDataTransfert
{
public class NativeMethods
{
public const string CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect";
public const string CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect";
public const string CFSTR_FILEDESCRIPTORW = "FileGroupDescriptorW";
public const string CFSTR_FILECONTENTS = "FileContents";
public const int FD_CLSID = 1;
public const int FD_SIZEPOINT = 2;
public const int FD_ATTRIBUTES = 4;
public const int FD_CREATETIME = 8;
public const int FD_ACCESSTIME = 16;
public const int FD_WRITESTIME = 32;
public const int FD_FILESIZE = 64;
public const int FD_PROGRESSUI = 16384;
public const int FD_LINKUI = 32768;
public const uint FILE_ATTRIBUTE_READONLY = 1;
public const uint FILE_ATTRIBUTE_HIDDEN = 2;
public const uint FILE_ATTRIBUTE_SYSTEM = 4;
public const uint FILE_ATTRIBUTE_DIRECTORY = 16;
public const uint FILE_ATTRIBUTE_ARCHIVE = 32;
public const uint FILE_ATTRIBUTE_NORMAL = 128;
public const int DV_E_TYMED = -2147221399;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GlobalAlloc(int uFlags, int dwBytes);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GlobalFree(HandleRef handle);
}
}

View File

@ -0,0 +1,16 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.STGTY
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
namespace GDRomExplorer.ShellDataTransfert
{
public enum STGTY
{
STGTY_STORAGE = 1,
STGTY_STREAM = 2,
STGTY_LOCKBYTES = 3,
STGTY_PROPERTY = 4,
}
}

View File

@ -0,0 +1,53 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ShellDataTransfert.StreamWrapper
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
namespace GDRomExplorer.ShellDataTransfert
{
public class StreamWrapper : IStream
{
private Stream fileStream;
private string fileName;
public StreamWrapper(Stream fileStream, string fileName)
{
this.fileStream = fileStream;
this.fileName = fileName;
}
public void Read(byte[] pv, int cb, IntPtr pcbRead) => Marshal.WriteInt32(pcbRead, this.fileStream.Read(pv, 0, cb));
public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition) => Marshal.WriteInt32(plibNewPosition, (int) this.fileStream.Seek(dlibMove, (SeekOrigin) dwOrigin));
public void Clone(out IStream ppstm) => throw new NotImplementedException();
public void Commit(int grfCommitFlags) => throw new NotImplementedException();
public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten) => throw new NotImplementedException();
public void LockRegion(long libOffset, long cb, int dwLockType) => throw new NotImplementedException();
public void Revert() => throw new NotImplementedException();
public void SetSize(long libNewSize) => throw new NotImplementedException();
public void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag)
{
pstatstg = new System.Runtime.InteropServices.ComTypes.STATSTG();
pstatstg.type = 2;
pstatstg.cbSize = this.fileStream.Length;
pstatstg.pwcsName = this.fileName;
}
public void UnlockRegion(long libOffset, long cb, int dwLockType) => throw new NotImplementedException();
public void Write(byte[] pv, int cb, IntPtr pcbWritten) => throw new NotImplementedException();
}
}

View File

@ -0,0 +1,954 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.DiscViewExplorer
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.DiscView;
using GDRomExplorer.Events;
using GDRomExplorer.Forms;
using GDRomExplorer.Others;
using GDRomExplorer.ShellDataTransfert;
using ImageReader.ISO9660.DirectoryRecords;
using ImageReader.ISO9660.VolumeDescriptors;
using SEGATools.CueSheet;
using SEGATools.Disc;
using SEGATools.DiscFileSystem;
using SEGATools.Encrypt;
using SEGATools.Security;
using SEGATools.SortFile;
using SEGATools.VirtualFile;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class DiscViewExplorer : UserControl
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IDiscFileSystem discFileSystem;
private TreeNode treeNodeInListView;
private Control lastControlWithFocus;
private MenuItemFactory menuItemFactory;
private ContextMenuManager contextMenuManager;
private UserActions userActions;
private ToolStripItem[] discMenuItems;
private DiscSelectionHandlerFactory treeViewSelectionHandlerFactory;
private DiscSelectionHandlerFactory listViewSelectionHandlerFactory;
private IContainer components;
private GroupBox groupBox;
private SplitContainer splitContainer;
private TreeView treeView;
private ListView listView;
private DiscExtractor discExtractor;
private SaveFileDialog saveFileDialogForInitialProgram;
private SaveFileDialog saveFileDialogForExtraction;
private SaveFileDialog saveFileDialogForCueSheet;
private SaveFileDialog saveFileDialogForSortFile;
private FolderBrowserDialog folderBrowserDialogForExtraction;
private SaveFileDialog saveFileDialogForDesDecrypt;
private GDDAConverterTool gddaConverterTool;
private ImageList treeViewImageList;
private ImageList listViewImageList;
private ImageList contextMenuImageList;
public event EventHandler<EventArgs<DiscViewExplorer.ActionsForEditMenuItem>> SelectionChanged;
public string Title
{
get => this.groupBox.Text;
private set => this.groupBox.Text = string.Format(GDRomExplorer.Resources.Strings.DiscViewExplorerGroupLabelWithFormat, (object) value);
}
public string Filename => this.discFileSystem != null ? this.discFileSystem.FileName : string.Empty;
public DiscViewExplorer()
{
this.InitializeComponent();
this.userActions = new UserActions();
this.userActions.SetHandler(UserActions.Action.ExportForGDEmu, new EventHandler(this.UserActionExportForGDEmu));
this.userActions.SetHandler(UserActions.Action.CreateCueSheet, new EventHandler(this.UserActionCreateCueSheet));
this.userActions.SetHandler(UserActions.Action.ShowGDDAConversion, new EventHandler(this.UserActionShowGDDAConversionForm));
this.userActions.SetHandler(UserActions.Action.ShowBootSector, new EventHandler(this.UserActionShowBootSector));
this.userActions.SetHandler(UserActions.Action.ExtractBootSector, new EventHandler(this.UserActionExtractInitialProgram));
this.userActions.SetHandler(UserActions.Action.ExtractItem, new EventHandler(this.UserActionExtractItem));
this.userActions.SetHandler(UserActions.Action.CreateSortFile, new EventHandler(this.UserActionGenerateSortFile));
this.userActions.SetHandler(UserActions.Action.ShowPrimaryVolumeDescriptor, new EventHandler(this.UserActionShowPrimaryVolumeDescriptor));
this.userActions.SetHandler(UserActions.Action.ConvertGDDA, new EventHandler(this.UserActionConvertGDDA));
this.userActions.SetHandler(UserActions.Action.DecryptNaomiBinary, new EventHandler(this.UserActionDecryptBinaryFromDisc));
this.treeViewSelectionHandlerFactory = (DiscSelectionHandlerFactory) new DiscTreeViewSelectionHandlerFactory(this, this.treeView);
this.listViewSelectionHandlerFactory = (DiscSelectionHandlerFactory) new DiscListViewSelectionHandlerFactory(this, this.listView);
this.menuItemFactory = new MenuItemFactory(this.userActions, this.contextMenuImageList);
this.contextMenuManager = new ContextMenuManager(this.menuItemFactory);
this.Resize += new EventHandler(this.DiscViewExplorer_Resize);
this.Leave += new EventHandler(this.DiscViewExplorer_Leave);
this.listView.Columns.Add(GDRomExplorer.Resources.Strings.DiscViewListColumnFileName, -2, HorizontalAlignment.Left);
this.listView.Columns.Add(GDRomExplorer.Resources.Strings.DiscViewListColumnSize, -2, HorizontalAlignment.Right);
this.listView.Columns.Add(GDRomExplorer.Resources.Strings.DiscViewListColumnSizeInBytes, -2, HorizontalAlignment.Right);
this.listView.Columns.Add(GDRomExplorer.Resources.Strings.DiscViewListColumnLBA, -2, HorizontalAlignment.Right);
this.listView.Columns.Add(GDRomExplorer.Resources.Strings.DiscViewListColumnModifiedDate, -2, HorizontalAlignment.Right);
this.listView.MouseClick += new MouseEventHandler(this.listView_MouseClick);
this.listView.MouseDoubleClick += new MouseEventHandler(this.listView_MouseClick);
this.listView.MouseUp += new MouseEventHandler(this.listView_MouseClick);
this.listView.ColumnClick += new ColumnClickEventHandler(this.listView_ColumnClick);
this.listView.KeyDown += new KeyEventHandler(this.listView_KeyDown);
this.listView.KeyUp += new KeyEventHandler(this.listView_KeyUp);
this.listView.ItemDrag += new ItemDragEventHandler(this.DiscViewExplorer_ItemDrag);
this.listView.GotFocus += new EventHandler(this.listView_GotFocus);
this.listView.LostFocus += new EventHandler(this.DiscViewExplorer_Leave);
this.listView.ListViewItemSorter = (IComparer) new ListViewColumnSorter()
{
Order = SortOrder.Ascending
};
this.treeView.AfterSelect += new TreeViewEventHandler(this.treeView_AfterSelect);
this.treeView.MouseClick += new MouseEventHandler(this.treeView_MouseClick);
this.treeView.MouseDoubleClick += new MouseEventHandler(this.treeView_MouseClick);
this.treeView.ItemDrag += new ItemDragEventHandler(this.DiscViewExplorer_ItemDrag);
this.treeView.GotFocus += new EventHandler(this.treeView_GotFocus);
this.treeView.Leave += new EventHandler(this.DiscViewExplorer_Leave);
this.saveFileDialogForInitialProgram.Title = GDRomExplorer.Resources.Strings.SfdInitialProgramTitle;
this.saveFileDialogForInitialProgram.Filter = GDRomExplorer.Resources.Strings.SfdInitialProgramFilter;
this.saveFileDialogForExtraction.Title = GDRomExplorer.Resources.Strings.SfdExtractTitle;
this.saveFileDialogForExtraction.Filter = GDRomExplorer.Resources.Strings.SfdExtractFilter;
this.saveFileDialogForCueSheet.Title = GDRomExplorer.Resources.Strings.SfdCueSheetTitle;
this.saveFileDialogForCueSheet.Filter = GDRomExplorer.Resources.Strings.SfdCueSheetFilter;
this.saveFileDialogForSortFile.Title = GDRomExplorer.Resources.Strings.SfdSortFileTitle;
this.saveFileDialogForSortFile.Filter = GDRomExplorer.Resources.Strings.SfdSortFileFilter;
this.saveFileDialogForDesDecrypt.Title = GDRomExplorer.Resources.Strings.NaomiEncryptDecryptToolSfdDecTitle;
this.saveFileDialogForDesDecrypt.Filter = GDRomExplorer.Resources.Strings.NaomiEncryptDecryptToolSfdDecFilter;
this.folderBrowserDialogForExtraction.Description = GDRomExplorer.Resources.Strings.FbdExtractFilesTitle;
this.folderBrowserDialogForExtraction.RootFolder = Environment.SpecialFolder.Desktop;
}
private void DiscViewExplorer_ItemDrag(object sender, ItemDragEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
if (sender == this.listView)
{
this.HandleDragAndDropFrom(this.listView);
}
else
{
if (sender != this.treeView)
throw new NotSupportedException();
this.treeView.SelectedNode = e.Item as TreeNode;
this.HandleDragAndDropFrom(this.treeView);
}
}
private void DiscViewExplorer_Load(object sender, EventArgs e) => this.CloseDisc();
private void DiscViewExplorer_Resize(object sender, EventArgs e) => this.ResizeListView();
private void DiscViewExplorer_Leave(object sender, EventArgs e) => this.contextMenuManager.CloseContextMenuIfAny();
public void LoadDisc(IDiscFileSystem discFileSystem)
{
this.EnableUIElements();
this.discFileSystem = discFileSystem;
this.discExtractor.DiscFileSystem = discFileSystem;
this.Title = discFileSystem.DiscName;
this.discMenuItems = this.menuItemFactory.CreateDiscWithSessionTopMenuItem(discFileSystem);
this.UpdateDialogsPath(Path.GetDirectoryName(discFileSystem.FileName));
TreeNode tree = ExplorerTreeNodeFactory.CreateTree(discFileSystem);
this.treeView.Nodes.Add(tree);
this.UpdateTreeViewSelectedNode(this.FindFileSystemTreeNode(discFileSystem, tree));
}
public void CloseDisc()
{
this.DisableUIElements();
this.treeNodeInListView = (TreeNode) null;
this.discFileSystem = (IDiscFileSystem) null;
this.DisableSelectionAndNotify();
}
private TreeNode FindFileSystemTreeNode(IDiscFileSystem disc, TreeNode rootNode)
{
TreeNode treeNode1 = rootNode;
foreach (IDiscSession discSession in (IEnumerable<IDiscSession>) disc.Sessions.OrderByDescending<IDiscSession, int>((Func<IDiscSession, int>) (session => session.Index)))
{
TreeNode[] treeNodeArray = rootNode.Nodes.Find(discSession.Name, false);
if (treeNodeArray.Length != 0)
{
TreeNode treeNode2 = treeNodeArray[0];
treeNode1 = treeNode2;
if (treeNode2.FirstNode != null)
{
TreeNode firstNode = treeNode2.FirstNode;
if (firstNode.Tag is IDiscTrack tag && tag.TrackData == TrackModeType.Data && (firstNode.LastNode != null && firstNode.LastNode.Tag is DirectoryRecord))
{
treeNode1 = firstNode.LastNode;
break;
}
}
}
}
return treeNode1;
}
private void DisableUIElements()
{
this.Title = GDRomExplorer.Resources.Strings.DiscViewNoDiscTitle;
this.treeView.Enabled = false;
this.treeView.Nodes.Clear();
this.treeView.BackColor = SystemColors.Control;
this.listView.Enabled = false;
this.listView.Items.Clear();
this.listView.Scrollable = false;
}
private void EnableUIElements()
{
this.treeView.BackColor = SystemColors.Window;
this.treeView.Nodes.Clear();
this.treeView.Enabled = true;
this.listView.Items.Clear();
this.listView.Scrollable = true;
this.listView.Enabled = true;
}
private void ShowBootSector(InitialProgramExtended ip)
{
using (FormInitialProgram formInitialProgram = new FormInitialProgram(ip, Path.GetDirectoryName(this.discFileSystem.FileName)))
{
int num = (int) formInitialProgram.ShowDialog((IWin32Window) this);
}
}
private void ShowPVD(PrimaryVolumeDescriptor PrimVolDesc)
{
using (FormPrimaryVolumeDescriptor volumeDescriptor = new FormPrimaryVolumeDescriptor(PrimVolDesc))
{
int num = (int) volumeDescriptor.ShowDialog((IWin32Window) this);
}
}
private void FillListView(DirectoryRecord directoryRecordToRead, TreeNode origin)
{
this.listView.Cursor = Cursors.AppStarting;
this.listView.BeginUpdate();
this.listView.Items.Clear();
ListViewItem listViewItem1 = (ListViewItem) null;
if (!directoryRecordToRead.IsRoot)
{
ListViewItem parentDirectoryItem = ExplorerListItemFactory.CreateParentDirectoryItem(directoryRecordToRead);
this.listView.Items.Add(parentDirectoryItem);
listViewItem1 = parentDirectoryItem;
}
ListViewItem[] items = new ListViewItem[directoryRecordToRead.SubDirectories.Count];
int num = 0;
foreach (DirectoryRecord subDirectory in directoryRecordToRead.SubDirectories)
{
ListViewItem listViewItem2 = ExplorerListItemFactory.CreateItem(subDirectory, this.discFileSystem);
items[num++] = listViewItem2;
if (origin != null && listViewItem2.Tag == origin.Tag)
listViewItem1 = listViewItem2;
}
this.listView.Items.AddRange(items);
this.listView.FocusedItem = listViewItem1;
this.listView.Cursor = Cursors.Default;
this.listView.EndUpdate();
this.ResizeListView();
}
private void ConvertGDDA(IDiscTrack discTrack)
{
using (FormAudioConversionSettings conversionSettings = new FormAudioConversionSettings())
{
if (conversionSettings.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
this.gddaConverterTool.ConvertGDDATracks(discTrack, conversionSettings.AudioConversionSettings);
}
}
private void ExtractAndDecryptFile(DirectoryRecord directoryRecord)
{
if (directoryRecord == null || directoryRecord.IsDirectory)
return;
DESKey desKey;
using (FormGetDESKey extractAndDecryptLabel = FormGetDESKey.aGetDESKeyFormWithExtractAndDecryptLabel(this.discFileSystem.NaomiDESKey))
{
if (extractAndDecryptLabel.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
desKey = extractAndDecryptLabel.DESKey;
}
this.saveFileDialogForDesDecrypt.FileName = Path.GetFileNameWithoutExtension(directoryRecord.Name);
if (this.saveFileDialogForDesDecrypt.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
string fileName = this.saveFileDialogForDesDecrypt.FileName;
this.UpdateDialogsPath(Path.GetDirectoryName(fileName));
this.saveFileDialogForDesDecrypt.FileName = Path.GetFileNameWithoutExtension(fileName);
IVirtualFile<DirectoryRecord> virtualFile1 = VirtualFileFactory.createVirtualFile(directoryRecord, this.discFileSystem);
IVirtualFile<string> virtualFile2 = VirtualFileFactory.createVirtualFile(fileName);
DesEncryptDecryptTool desDecryptor = new DesEncryptDecryptTool();
Guid TaskId = Guid.NewGuid();
FormProcess.createForDesDecryptor(desDecryptor, TaskId);
desDecryptor.DecryptAsync((IVirtualFile) virtualFile1, (IVirtualFile) virtualFile2, desKey, (object) TaskId);
}
private void ExtractInitialProgram(InitialProgramExtended initialProgramExtended)
{
this.saveFileDialogForInitialProgram.FileName = initialProgramExtended.FileName;
if (this.saveFileDialogForInitialProgram.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
string fileName = this.saveFileDialogForInitialProgram.FileName;
this.UpdateDialogsPath(Path.GetDirectoryName(fileName));
try
{
this.discExtractor.ExtractBootStrap((InitialProgram) initialProgramExtended, fileName);
AppStatus.NotifyNewAppStatus(string.Format(GDRomExplorer.Resources.Strings.MsgBoxInitialProgramExtractionSuccessWithFormat, (object) fileName));
}
catch (Exception ex)
{
DiscViewExplorer.logger.ErrorFormat("Unable to extract the boot file: {0}", (object) ex);
int num = (int) MessageBox.Show((IWin32Window) this, GDRomExplorer.Resources.Strings.MsgBoxInitialProgramExtractionErrorWithFormat, GDRomExplorer.Resources.Strings.MsgBoxInitialProgramExtractionTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
AppStatus.NotifyNewAppStatus(string.Format(GDRomExplorer.Resources.Strings.MsgBoxInitialProgramExtractionErrorWithFormat, (object) fileName));
}
}
private void ExportForGDEmu(IDiscFileSystem discFileSystem)
{
using (FormGDEmuExportSettings emuExportSettings = new FormGDEmuExportSettings(discFileSystem))
{
int num = (int) emuExportSettings.ShowDialog((IWin32Window) this);
}
}
private void CreateCueSheet(IDiscSession discSession)
{
string Title = string.Format("{0} ({1})", (object) this.discFileSystem.DiscName, (object) discSession.Name);
this.saveFileDialogForCueSheet.FileName = Title;
if (this.saveFileDialogForCueSheet.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
string fileName = this.saveFileDialogForCueSheet.FileName;
this.UpdateDialogsPath(Path.GetDirectoryName(fileName));
this.saveFileDialogForCueSheet.FileName = Path.GetFileNameWithoutExtension(fileName);
try
{
CueSheetCreator.CreateFromDiscSession(discSession, fileName, Title);
AppStatus.NotifyNewAppStatus(GDRomExplorer.Resources.Strings.MsgBoxCueCreatorSuccess);
}
catch (Exception ex)
{
DiscViewExplorer.logger.ErrorFormat("Unable to create the sort file: {0}", (object) ex);
int num = (int) MessageBox.Show((IWin32Window) this, GDRomExplorer.Resources.Strings.MsgBoxCueCreatorError, GDRomExplorer.Resources.Strings.MsgBoxCueCreatorTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
AppStatus.NotifyNewAppStatus(GDRomExplorer.Resources.Strings.MsgBoxCueCreatorError);
}
}
private void CreateSortFile(IDiscSession discSession)
{
string pathPrefix;
int lowestFileWeight;
using (FormSortFileOptions formSortFileOptions = new FormSortFileOptions())
{
if (formSortFileOptions.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
pathPrefix = formSortFileOptions.PathPrefix;
lowestFileWeight = formSortFileOptions.LowestFileWeight;
}
if (string.IsNullOrEmpty(Path.GetFileName(this.saveFileDialogForSortFile.FileName)))
this.saveFileDialogForSortFile.FileName = SortFileCreator.DefaultFileName;
if (this.saveFileDialogForSortFile.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
string fileName = this.saveFileDialogForSortFile.FileName;
this.saveFileDialogForSortFile.FileName = Path.GetFileNameWithoutExtension(fileName);
this.UpdateDialogsPath(Path.GetDirectoryName(fileName));
try
{
SortFileCreator.CreateSortFile(discSession, pathPrefix, lowestFileWeight, fileName);
AppStatus.NotifyNewAppStatus(GDRomExplorer.Resources.Strings.MsgBoxSortFileCreationSuccess);
}
catch (Exception ex)
{
DiscViewExplorer.logger.ErrorFormat("Unable to create the sort file: {0}", (object) ex);
int num = (int) MessageBox.Show((IWin32Window) this, GDRomExplorer.Resources.Strings.MsgBoxSortFileCreationError, GDRomExplorer.Resources.Strings.MsgBoxSortFileCreationTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
AppStatus.NotifyNewAppStatus(GDRomExplorer.Resources.Strings.MsgBoxSortFileCreationError);
}
}
private void OpenExtractNodesDialog(List<DirectoryRecord> DirectoryRecords)
{
if (DirectoryRecords == null || DirectoryRecords.Count == 0)
{
DiscViewExplorer.logger.Debug((object) "Nothing to extract!");
}
else
{
string str;
if (DirectoryRecords.Count == 1 && !DirectoryRecords[0].IsDirectory)
{
this.saveFileDialogForExtraction.FileName = DirectoryRecords[0].Name;
if (this.saveFileDialogForExtraction.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
str = this.saveFileDialogForExtraction.FileName;
this.UpdateDialogsPath(Path.GetDirectoryName(str));
}
else
{
if (this.folderBrowserDialogForExtraction.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
str = this.folderBrowserDialogForExtraction.SelectedPath;
this.UpdateDialogsPath(str);
}
Guid TaskId = Guid.NewGuid();
FormProcess.createForDiscExtractor(this.discExtractor, TaskId);
this.discExtractor.ExtractPathsAsync(DirectoryRecords, str, (object) TaskId);
}
}
private void OpenExtractNodesDialogForDiscTrack(IDiscTrack discTrack)
{
this.saveFileDialogForExtraction.FileName = Path.GetFileName(discTrack.VirtualName);
if (this.saveFileDialogForExtraction.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
string fileName = this.saveFileDialogForExtraction.FileName;
this.UpdateDialogsPath(Path.GetDirectoryName(fileName));
Guid TaskId = Guid.NewGuid();
FormProcess.createForDiscExtractor(this.discExtractor, TaskId);
this.discExtractor.ExtractDiscTracksAsync(discTrack, fileName, (object) TaskId);
}
private void UpdateDialogsPath(string outputPath) => this.saveFileDialogForInitialProgram.InitialDirectory = this.saveFileDialogForExtraction.InitialDirectory = this.saveFileDialogForCueSheet.InitialDirectory = this.saveFileDialogForSortFile.InitialDirectory = this.saveFileDialogForDesDecrypt.InitialDirectory = this.folderBrowserDialogForExtraction.SelectedPath = outputPath;
private void ResizeListView()
{
this.listView.SuspendLayout();
for (int index = 0; index < this.listView.Columns.Count; ++index)
this.listView.Columns[index].Width = -2;
this.listView.ResumeLayout(false);
}
private void DisableSelectionAndNotify()
{
if (this.SelectionChanged == null)
return;
this.SelectionChanged((object) this, new EventArgs<DiscViewExplorer.ActionsForEditMenuItem>(DiscViewExplorer.ActionsForEditMenuItem.NoEditActions()));
}
private void RemoveSelectionAndNotify()
{
if (this.SelectionChanged == null)
return;
this.SelectionChanged((object) this, this.CreateNewSelectionEvent(this.menuItemFactory.CreateSelectionDisabledTopMenuItem()));
}
private void NotifySelectionChanged(ToolStripItem[] NewSelectionMenuItems)
{
if (this.SelectionChanged == null)
return;
this.SelectionChanged((object) this, this.CreateNewSelectionEvent(NewSelectionMenuItems));
}
private EventArgs<DiscViewExplorer.ActionsForEditMenuItem> CreateNewSelectionEvent(
ToolStripItem[] NewSelectionMenuItems)
{
return new EventArgs<DiscViewExplorer.ActionsForEditMenuItem>(new DiscViewExplorer.ActionsForEditMenuItem(this.discMenuItems, NewSelectionMenuItems));
}
private void UpdateTreeViewSelectedNode(TreeNode newSelection)
{
this.treeView.SelectedNode = newSelection;
this.treeView.SelectedNode.EnsureVisible();
this.treeView.SelectedNode.Expand();
}
private void NagivateUp()
{
if (this.treeNodeInListView.Parent == null || !(this.treeNodeInListView.Parent.Tag is DirectoryRecord))
return;
this.treeView.SelectedNode = this.treeNodeInListView.Parent;
}
private void NavigateDown()
{
if (this.listView.FocusedItem == null || !(this.listView.FocusedItem.Tag is DirectoryRecord) || !(this.listView.FocusedItem.Tag as DirectoryRecord).IsDirectory)
return;
if (this.treeNodeInListView.Tag == this.listView.FocusedItem.Tag)
{
this.NagivateUp();
}
else
{
TreeNode[] treeNodeArray = this.treeNodeInListView.Nodes.Find(this.listView.FocusedItem.Name, false);
if (treeNodeArray.Length != 1)
return;
this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView(treeNodeArray[0].Tag));
}
}
private void SelectAllListViewItems()
{
foreach (ListViewItem listViewItem in this.listView.Items)
{
if (!DirectoryRecord.PARENT_DIRECTORY_NAME.Equals(listViewItem.Text))
listViewItem.Selected = true;
}
}
private void UserActionExportForGDEmu(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscFileSystem))
return;
this.ExportForGDEmu(toolStripItem.Tag as IDiscFileSystem);
}
private void UserActionCreateCueSheet(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscSession))
return;
this.CreateCueSheet(toolStripItem.Tag as IDiscSession);
}
private void UserActionShowGDDAConversionForm(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscSession))
return;
using (FormGdda formGdda = new FormGdda(toolStripItem.Tag as IDiscSession))
{
if (formGdda.ShowDialog((IWin32Window) this) != DialogResult.OK)
return;
this.gddaConverterTool.ConvertGDDATracks((IList<IDiscTrack>) formGdda.SelectedDiscTracks, formGdda.AudioConversionSettings);
}
}
private void UserActionShowBootSector(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is InitialProgramExtended))
return;
this.ShowBootSector(toolStripItem.Tag as InitialProgramExtended);
}
private void UserActionExtractInitialProgram(object sender, EventArgs eventArgs)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is InitialProgramExtended))
return;
this.ExtractInitialProgram(toolStripItem.Tag as InitialProgramExtended);
}
private void UserActionExtractItem(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
List<DirectoryRecord> DirectoryRecords = new List<DirectoryRecord>();
if (toolStripItem.Tag is List<DirectoryRecord>)
this.OpenExtractNodesDialog(toolStripItem.Tag as List<DirectoryRecord>);
else if (toolStripItem.Tag is DirectoryRecord)
{
DirectoryRecords.Add(toolStripItem.Tag as DirectoryRecord);
this.OpenExtractNodesDialog(DirectoryRecords);
}
else if (toolStripItem.Tag is IDiscTrack)
this.OpenExtractNodesDialogForDiscTrack(toolStripItem.Tag as IDiscTrack);
else
DiscViewExplorer.logger.ErrorFormat("Unhandled tag object {0} for ToolStripItem {1}", toolStripItem.Tag, (object) toolStripItem);
}
private void UserActionGenerateSortFile(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscSession))
return;
this.CreateSortFile(toolStripItem.Tag as IDiscSession);
}
private void UserActionShowPrimaryVolumeDescriptor(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscTrack))
return;
this.ShowPVD((toolStripItem.Tag as IDiscTrack).Session.PrimaryVolumeDescriptor);
}
private void UserActionConvertGDDA(object sender, EventArgs e)
{
if (!(sender is ToolStripItem))
return;
ToolStripItem toolStripItem = sender as ToolStripItem;
if (!(toolStripItem.Tag is IDiscTrack))
return;
this.ConvertGDDA(toolStripItem.Tag as IDiscTrack);
}
private void UserActionDecryptBinaryFromDisc(object sender, EventArgs e)
{
if (this.listView.SelectedItems.Count != 1 || !(this.listView.SelectedItems[0].Tag is DirectoryRecord))
return;
this.ExtractAndDecryptFile(this.listView.SelectedItems[0].Tag as DirectoryRecord);
}
private void HandleDragAndDropFrom(ListView ListView)
{
List<DirectoryRecord> list = ListView.SelectedItems.Cast<ListViewItem>().Select<ListViewItem, DirectoryRecord>((Func<ListViewItem, DirectoryRecord>) (item => (DirectoryRecord) item.Tag)).ToList<DirectoryRecord>();
DataObject dataObject = FileDescriptorFactory.createDataObject((object) list, this.discFileSystem);
if (dataObject != null)
{
int num = (int) this.DoDragDrop((object) dataObject, DragDropEffects.Copy);
}
else
DiscViewExplorer.logger.WarnFormat("Drag'n Drop canceled: FileDescriptorFactory does not support {0}", (object) list);
}
private void HandleDragAndDropFrom(TreeView TreeView)
{
object tag = TreeView.SelectedNode.Tag;
DataObject dataObject = FileDescriptorFactory.createDataObject(tag, this.discFileSystem);
if (dataObject != null)
{
int num = (int) this.DoDragDrop((object) dataObject, DragDropEffects.Copy);
}
else
DiscViewExplorer.logger.WarnFormat("Drag'n Drop canceled: FileDescriptorFactory does not support {0}", tag);
}
public void Disc_AfterSelectHandler(IDiscFileSystem disc) => this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) disc));
public void Disc_MouseRightClickHandler(IDiscFileSystem disc)
{
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) disc);
this.contextMenuManager.CreateAndShowContextMenu(itemsForTreeView);
this.NotifySelectionChanged(itemsForTreeView);
}
public void DirectoryRecord_AfterSelectClickHandler(DirectoryRecord DirectoryRecord)
{
DiscViewExplorer.logger.InfoFormat("Opening path \"{0}\"", (object) DirectoryRecord.FullPath);
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DirectoryRecord);
TreeNode treeNodeInListView = this.treeNodeInListView;
this.treeNodeInListView = this.treeView.SelectedNode;
this.FillListView(DirectoryRecord, treeNodeInListView);
this.NotifySelectionChanged(itemsForTreeView);
}
public void DirectoryRecord_MouseRightClickHandler(DirectoryRecord DirectoryRecord)
{
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DirectoryRecord);
this.contextMenuManager.CreateAndShowContextMenu(itemsForTreeView);
this.NotifySelectionChanged(itemsForTreeView);
}
public void DirectoryRecords_MouseLeftClickHandler(IList<DirectoryRecord> DirectoryRecords)
{
DirectoryRecord firstDirectoryRecord = DirectoryRecords[0];
if (!DirectoryRecords.All<DirectoryRecord>((Func<DirectoryRecord, bool>) (directoryRecord => directoryRecord.ParentDirectory == firstDirectoryRecord.ParentDirectory)))
this.RemoveSelectionAndNotify();
else
this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForListView((object) DirectoryRecords, this.discFileSystem));
}
public void DirectoryRecords_MouseDoubleLeftClicksHandler(
IList<DirectoryRecord> DirectoryRecords)
{
DirectoryRecord directoryRecord = DirectoryRecords[0];
if (!directoryRecord.IsDirectory)
return;
this.UpdateTreeViewSelectedNode(this.treeNodeInListView.Tag as DirectoryRecord != directoryRecord || this.treeNodeInListView.Parent == null ? this.treeNodeInListView.Nodes[directoryRecord.Name] : this.treeNodeInListView.Parent);
}
public void DirectoryRecords_MouseRightClickHandler(IList<DirectoryRecord> DirectoryRecords)
{
DirectoryRecord firstDirectoryRecord = DirectoryRecords[0];
if (!DirectoryRecords.All<DirectoryRecord>((Func<DirectoryRecord, bool>) (directoryRecord => directoryRecord.ParentDirectory == firstDirectoryRecord.ParentDirectory)))
{
this.RemoveSelectionAndNotify();
}
else
{
ToolStripItem[] itemsForListView = this.menuItemFactory.CreateSelectionMenuItemsForListView((object) DirectoryRecords, this.discFileSystem);
this.contextMenuManager.CreateAndShowContextMenu(itemsForListView);
this.NotifySelectionChanged(itemsForListView);
}
}
public void InitialProgram_AfterSelectHandler(InitialProgramExtended InitialProgram) => this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) InitialProgram));
public void InitialProgram_MouseDoubleLeftClicksHandler(InitialProgramExtended InitialProgram)
{
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) InitialProgram);
this.ShowBootSector(InitialProgram);
this.NotifySelectionChanged(itemsForTreeView);
}
public void InitialProgram_MouseRightClickHandler(InitialProgramExtended InitialProgram) => this.contextMenuManager.CreateAndShowContextMenu(this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) InitialProgram));
public void DiscSession_AfterSelectHandler(IDiscSession DiscSession) => this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DiscSession));
public void DiscSession_MouseRightClickHandler(IDiscSession DiscSession)
{
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DiscSession);
this.contextMenuManager.CreateAndShowContextMenu(itemsForTreeView);
this.NotifySelectionChanged(itemsForTreeView);
}
public void DiscTrack_AfterSelectHandler(IDiscTrack DiscTrack) => this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DiscTrack));
public void DiscTrack_MouseRightClickHandler(IDiscTrack DiscTrack)
{
ToolStripItem[] itemsForTreeView = this.menuItemFactory.CreateSelectionMenuItemsForTreeView((object) DiscTrack);
this.contextMenuManager.CreateAndShowContextMenu(itemsForTreeView);
this.NotifySelectionChanged(itemsForTreeView);
}
private void treeView_MouseClick(object sender, MouseEventArgs e)
{
TreeNode nodeAt = this.treeView.GetNodeAt(e.Location);
if (nodeAt == null)
return;
this.treeView.SelectedNode = nodeAt;
IDiscViewSelection discViewSelection = this.treeViewSelectionHandlerFactory.newSelectionHandlers(this.treeView.SelectedNode.Tag);
if (discViewSelection != null)
discViewSelection.HandleMouseEvent(e);
else
DiscViewExplorer.logger.ErrorFormat("Unhandled object {0}", (object) this.Handle);
}
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode node = e.Node;
if (node == null)
return;
this.treeViewSelectionHandlerFactory.newSelectionHandlers(node.Tag)?.HandleAfterSelect();
}
private void treeView_GotFocus(object sender, EventArgs e)
{
if (this.lastControlWithFocus == this.treeView)
return;
this.lastControlWithFocus = (Control) this.treeView;
if (this.treeView.SelectedNode != null)
this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForTreeView(this.treeView.SelectedNode.Tag));
else
this.RemoveSelectionAndNotify();
}
private void listView_MouseClick(object sender, MouseEventArgs mouseEvent)
{
if (this.listView.SelectedItems.Count == 0)
this.RemoveSelectionAndNotify();
else
this.listViewSelectionHandlerFactory.newSelectionHandlers((object) this.listView.SelectedItems.Cast<ListViewItem>().Select<ListViewItem, DirectoryRecord>((Func<ListViewItem, DirectoryRecord>) (item => (DirectoryRecord) item.Tag)).ToList<DirectoryRecord>()).HandleMouseEvent(mouseEvent);
}
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
this.listView.BeginUpdate();
this.listView.Sorting = this.listView.Sorting != SortOrder.Ascending ? (((ListViewColumnSorter) this.listView.ListViewItemSorter).Order = SortOrder.Ascending) : (((ListViewColumnSorter) this.listView.ListViewItemSorter).Order = SortOrder.Descending);
((ListViewColumnSorter) this.listView.ListViewItemSorter).SortColumn = e.Column;
this.listView.Sort();
this.listView.EndUpdate();
}
private void listView_KeyUp(object sender, KeyEventArgs e)
{
if (this.listView.SelectedItems.Count == 0)
this.RemoveSelectionAndNotify();
else
this.listViewSelectionHandlerFactory.newSelectionHandlers((object) this.listView.SelectedItems.Cast<ListViewItem>().Select<ListViewItem, DirectoryRecord>((Func<ListViewItem, DirectoryRecord>) (item => (DirectoryRecord) item.Tag)).ToList<DirectoryRecord>()).HandleLeftClick();
}
private void listView_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control)
{
if (e.KeyCode != Keys.A)
return;
this.SelectAllListViewItems();
}
else if (e.KeyCode == Keys.Return)
{
this.NavigateDown();
}
else
{
if (e.KeyCode != Keys.Back)
return;
this.NagivateUp();
}
}
private void listView_GotFocus(object sender, EventArgs e)
{
if (this.lastControlWithFocus == this.listView)
return;
this.lastControlWithFocus = (Control) this.listView;
if (this.listView.SelectedItems.Count > 0)
this.NotifySelectionChanged(this.menuItemFactory.CreateSelectionMenuItemsForListView((object) this.listView.SelectedItems.Cast<ListViewItem>().Select<ListViewItem, DirectoryRecord>((Func<ListViewItem, DirectoryRecord>) (item => (DirectoryRecord) item.Tag)).ToList<DirectoryRecord>(), this.discFileSystem));
else
this.RemoveSelectionAndNotify();
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = (IContainer) new Container();
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (DiscViewExplorer));
this.groupBox = new GroupBox();
this.splitContainer = new SplitContainer();
this.treeView = new TreeView();
this.treeViewImageList = new ImageList(this.components);
this.listView = new ListView();
this.listViewImageList = new ImageList(this.components);
this.saveFileDialogForInitialProgram = new SaveFileDialog();
this.saveFileDialogForExtraction = new SaveFileDialog();
this.saveFileDialogForCueSheet = new SaveFileDialog();
this.saveFileDialogForSortFile = new SaveFileDialog();
this.folderBrowserDialogForExtraction = new FolderBrowserDialog();
this.saveFileDialogForDesDecrypt = new SaveFileDialog();
this.discExtractor = new DiscExtractor(this.components);
this.contextMenuImageList = new ImageList(this.components);
this.gddaConverterTool = new GDDAConverterTool(this.components);
this.groupBox.SuspendLayout();
this.splitContainer.Panel1.SuspendLayout();
this.splitContainer.Panel2.SuspendLayout();
this.splitContainer.SuspendLayout();
this.SuspendLayout();
this.groupBox.AutoSize = true;
this.groupBox.BackColor = SystemColors.Window;
this.groupBox.Controls.Add((Control) this.splitContainer);
this.groupBox.Dock = DockStyle.Fill;
this.groupBox.Location = new Point(4, 4);
this.groupBox.Name = "groupBox";
this.groupBox.Size = new Size(632, 472);
this.groupBox.TabIndex = 0;
this.groupBox.TabStop = false;
this.groupBox.Text = "Disc title";
this.splitContainer.Dock = DockStyle.Fill;
this.splitContainer.Location = new Point(3, 16);
this.splitContainer.Name = "splitContainer";
this.splitContainer.Panel1.Controls.Add((Control) this.treeView);
this.splitContainer.Panel2.Controls.Add((Control) this.listView);
this.splitContainer.Size = new Size(626, 453);
this.splitContainer.SplitterDistance = 207;
this.splitContainer.TabIndex = 0;
this.splitContainer.TabStop = false;
this.treeView.BackColor = SystemColors.Window;
this.treeView.Dock = DockStyle.Fill;
this.treeView.HideSelection = false;
this.treeView.HotTracking = true;
this.treeView.ImageIndex = 0;
this.treeView.ImageList = this.treeViewImageList;
this.treeView.Indent = 18;
this.treeView.ItemHeight = 18;
this.treeView.Location = new Point(0, 0);
this.treeView.Name = "treeView";
this.treeView.SelectedImageIndex = 0;
this.treeView.ShowLines = false;
this.treeView.ShowNodeToolTips = true;
this.treeView.Size = new Size(207, 453);
this.treeView.TabIndex = 1;
this.treeViewImageList.ImageStream = (ImageListStreamer) componentResourceManager.GetObject("treeViewImageList.ImageStream");
this.treeViewImageList.TransparentColor = Color.Transparent;
this.treeViewImageList.Images.SetKeyName(0, "gd_icon.png");
this.treeViewImageList.Images.SetKeyName(1, "dclogo_black.png");
this.treeViewImageList.Images.SetKeyName(2, "cdrom_data.png");
this.treeViewImageList.Images.SetKeyName(3, "cdrom_audio.png");
this.treeViewImageList.Images.SetKeyName(4, "file_binary.png");
this.treeViewImageList.Images.SetKeyName(5, "iso9660.png");
this.treeViewImageList.Images.SetKeyName(6, "folder_closed.ico");
this.treeViewImageList.Images.SetKeyName(7, "folder_open.ico");
this.listView.AllowColumnReorder = true;
this.listView.Dock = DockStyle.Fill;
this.listView.Font = new Font("Microsoft Sans Serif", 8.25f);
this.listView.FullRowSelect = true;
this.listView.HideSelection = false;
this.listView.LabelWrap = false;
this.listView.Location = new Point(0, 0);
this.listView.Name = "listView";
this.listView.ShowGroups = false;
this.listView.ShowItemToolTips = true;
this.listView.Size = new Size(415, 453);
this.listView.SmallImageList = this.listViewImageList;
this.listView.Sorting = SortOrder.Ascending;
this.listView.TabIndex = 2;
this.listView.UseCompatibleStateImageBehavior = false;
this.listView.View = View.Details;
this.listViewImageList.ImageStream = (ImageListStreamer) componentResourceManager.GetObject("listViewImageList.ImageStream");
this.listViewImageList.TransparentColor = Color.Transparent;
this.listViewImageList.Images.SetKeyName(0, "file.ico");
this.listViewImageList.Images.SetKeyName(1, "folder_closed.ico");
this.listViewImageList.Images.SetKeyName(2, "folder_up.ico");
this.discExtractor.DiscFileSystem = (IDiscFileSystem) null;
this.contextMenuImageList.ImageStream = (ImageListStreamer) componentResourceManager.GetObject("contextMenuImageList.ImageStream");
this.contextMenuImageList.TransparentColor = Color.Transparent;
this.contextMenuImageList.Images.SetKeyName(0, "extract_icon.ico");
this.contextMenuImageList.Images.SetKeyName(1, "file.ico");
this.contextMenuImageList.Images.SetKeyName(2, "zoom.ico");
this.contextMenuImageList.Images.SetKeyName(3, "help.ico");
this.contextMenuImageList.Images.SetKeyName(4, "folder_open.ico");
this.contextMenuImageList.Images.SetKeyName(5, "folder_up.ico");
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.AutoSize = true;
this.Controls.Add((Control) this.groupBox);
this.DoubleBuffered = true;
this.Name = nameof (DiscViewExplorer);
this.Padding = new Padding(4);
this.Size = new Size(640, 480);
this.Load += new EventHandler(this.DiscViewExplorer_Load);
this.Leave += new EventHandler(this.DiscViewExplorer_Leave);
this.groupBox.ResumeLayout(false);
this.splitContainer.Panel1.ResumeLayout(false);
this.splitContainer.Panel2.ResumeLayout(false);
this.splitContainer.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
public sealed class ActionsForEditMenuItem
{
public bool AnyAvailable { get; private set; }
public bool SelectionMenuAvailable { get; private set; }
public ToolStripItem[] DiscMenuItems { get; private set; }
public ToolStripItem[] SelectionMenuItems { get; private set; }
internal ActionsForEditMenuItem(
ToolStripItem[] DiscMenuItems,
ToolStripItem[] SelectionMenuItems)
{
this.DiscMenuItems = DiscMenuItems;
this.SelectionMenuItems = SelectionMenuItems;
this.SelectionMenuAvailable = SelectionMenuItems != null && SelectionMenuItems.Length > 0;
this.AnyAvailable = this.SelectionMenuAvailable || DiscMenuItems != null && DiscMenuItems.Length > 0;
}
internal static DiscViewExplorer.ActionsForEditMenuItem NoEditActions() => new DiscViewExplorer.ActionsForEditMenuItem((ToolStripItem[]) null, (ToolStripItem[]) null);
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,305 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.DiscViewOpener
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Events;
using GDRomExplorer.Forms;
using GDRomExplorer.Properties;
using GDRomExplorer.Resources;
using ImageReader.DiscFileSystem;
using SEGATools.Disc;
using SEGATools.DiscFileSystem;
using SEGATools.FileFormat;
using SEGATools.Security;
using SEGATools.UserProcess;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class DiscViewOpener : UserControl
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private FormLoading formLoading;
private List<string> fileDialogIncludeFilters = new List<string>();
private string SelectedDiscImage;
private bool notifyStatusEvents;
private IContainer components;
private TableLayoutPanel tableLayoutPanel;
private Button btOpen;
private TextBox tbDiscImageFile;
private GroupBox groupBox;
private DiscOpener discOpener;
private DiscFormatProvider discFormatProvider;
private OpenFileDialog openFileDialog;
public event EventHandler<EventArgs<IDiscFileSystem>> ImageLoaded;
public event EventHandler ImageNotLoaded;
[Description("Specifies the text of the group box.")]
[Category("Appearance")]
[Browsable(true)]
public override string Text
{
get => this.groupBox.Text;
set => this.groupBox.Text = value;
}
[Description("Specifies the text of the open button.")]
[Category("Appearance")]
[Browsable(true)]
public string ButtonText
{
get => this.btOpen.Text;
set => this.btOpen.Text = value;
}
[Browsable(true)]
[Description("Indicates the initial directory for the OpenFileDialog.")]
[Category("Behavior")]
public string InitialDirectory
{
get => this.openFileDialog.InitialDirectory;
set => this.openFileDialog.InitialDirectory = value;
}
[Description("Indicates whether the control should notify the application status bar control.")]
[Category("Behavior")]
[Browsable(true)]
public bool NotifyStatusEvents
{
get => this.notifyStatusEvents;
set => this.notifyStatusEvents = value;
}
[Category("Behavior")]
[Description("Restrict the list of valid file extensions.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", "System.Drawing.Design.UITypeEditor, System.Drawing")]
public List<string> FileDialogFilters
{
get => this.fileDialogIncludeFilters;
set => this.fileDialogIncludeFilters = value;
}
public DiscViewOpener()
{
this.InitializeComponent();
this.btOpen.Text = Strings.DiscViewOpenerButtonOpen;
this.groupBox.Text = Strings.DiscViewOpenerLabel + (object) ':';
this.openFileDialog.Title = Strings.DiscViewOpenerFileDialogTitle;
this.discOpener = new DiscOpener();
}
public void SetLoadedDiscImage(IDiscFileSystem discFileSystem)
{
string message = string.Format(Strings.StatusLabelImageLoaded, (object) discFileSystem.FileName);
DiscViewOpener.logger.InfoFormat("Image successfully opened: {0}", (object) discFileSystem.FileName);
this.tbDiscImageFile.Text = discFileSystem.FileName;
this.tbDiscImageFile.BackColor = SystemColors.Window;
if (this.ImageLoaded != null)
this.ImageLoaded((object) this, new EventArgs<IDiscFileSystem>(discFileSystem));
this.NotifyNewAppStatus(message);
}
public void Open()
{
this.openFileDialog.Filter = this.discFormatProvider.GetFileDialogFilters(this.FileDialogFilters != null ? this.FileDialogFilters.ToArray() : (string[]) null);
if (this.openFileDialog.ShowDialog() != DialogResult.OK)
return;
this.Open(this.openFileDialog.FileName);
}
public void Open(string FileName)
{
if (!File.Exists(FileName))
{
DiscViewOpener.logger.ErrorFormat("File not found {0}", (object) FileName);
string str = string.Format(Strings.MsgBoxImageOpenerFileNotFoundErrorWithFormat, (object) Path.GetFullPath(FileName));
int num = (int) MessageBox.Show((IWin32Window) this, str, Strings.MsgBoxImageOpenerTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
this.NotifyNewAppStatus(str);
this.Close();
}
else
{
string extension = Path.GetExtension(FileName);
if (!this.discFormatProvider.IsFileExtensionSupported(extension))
{
DiscViewOpener.logger.ErrorFormat("Not supported file extension for file {0}", (object) FileName);
string str = string.Format(Strings.MsgBoxImageOpenerBadFileExtensionErrorWithFormat, (object) Path.GetExtension(FileName));
int num = (int) MessageBox.Show((IWin32Window) this, str, Strings.MsgBoxImageOpenerTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
this.NotifyNewAppStatus(str);
this.Close();
}
else
{
this.SelectedDiscImage = FileName;
IImageFileFormat forFileExtension = this.discFormatProvider.FindImageFileFormatForFileExtension(extension);
this.openFileDialog.InitialDirectory = Path.GetDirectoryName(this.SelectedDiscImage);
this.openFileDialog.FileName = Path.GetFileName(this.SelectedDiscImage);
if (this.openFileDialog.FilterIndex > 1)
this.openFileDialog.FilterIndex = this.discFormatProvider.GetFileFormatIndex(forFileExtension);
this.formLoading = new FormLoading(Strings.DiscViewOpenerImageLoadingTitle, Strings.DiscViewOpenerImageLoadingMessage);
this.discOpener.FileOpenerProgressChanged += new AsyncOperationProgressChangedEventHandler(this.GDRomFileSystem_GDRomImageOpenProgressChanged);
this.discOpener.FileOpenerCompleted += new AsyncOperationCompletedEventHandler(this.GDRomFileSystem_GDRomImageOpenCompleted);
this.discOpener.OpenImageAsync(this.SelectedDiscImage, forFileExtension.ImageFileConverter, Settings.Default.ImageReaderComputePathTable);
}
}
}
public void Close()
{
this.tbDiscImageFile.Text = string.Empty;
this.tbDiscImageFile.BackColor = SystemColors.Menu;
this.SelectedDiscImage = string.Empty;
this.discOpener.CloseImage();
if (this.ImageNotLoaded == null)
return;
this.ImageNotLoaded((object) this, new EventArgs());
}
private void btOpen_Click(object sender, EventArgs e) => this.Open();
private void NotifyNewAppStatus(string message)
{
if (!this.NotifyStatusEvents)
return;
AppStatus.NotifyNewAppStatus(message);
}
private string GetErrorMessage(Exception e)
{
switch (e)
{
case DiscFileSystemException _:
return string.Format(Strings.StatusLabelImageError, (object) Strings.DiscViewOpenerNoFileSystemError);
case InitialProgramException _:
return string.Format(Strings.StatusLabelImageError, (object) string.Format(Strings.DiscViewOpenerInvalidInitialProgram, (object) e.Message));
case DiscFormatException _:
return string.Format(Strings.StatusLabelImageError, (object) e.Message);
default:
return string.Format(Strings.StatusLabelImageError, (object) Strings.DiscViewOpenerUnknownError);
}
}
private void GDRomFileSystem_GDRomImageOpenCompleted(
object sender,
UserProcessCompletedEventArgs e)
{
this.formLoading.Close();
this.formLoading = (FormLoading) null;
this.discOpener.FileOpenerProgressChanged -= new AsyncOperationProgressChangedEventHandler(this.GDRomFileSystem_GDRomImageOpenProgressChanged);
this.discOpener.FileOpenerCompleted -= new AsyncOperationCompletedEventHandler(this.GDRomFileSystem_GDRomImageOpenCompleted);
if (e.Error != null)
{
string errorMessage = this.GetErrorMessage(e.Error);
DiscViewOpener.logger.ErrorFormat("Unable to open image {0}: {1}", (object) e.ResourceName, (object) e.Error);
int num = (int) MessageBox.Show((IWin32Window) this, errorMessage, Strings.MsgBoxImageOpenerTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
this.NotifyNewAppStatus(errorMessage);
this.Close();
}
else
this.SetLoadedDiscImage(this.discOpener.DiscFileSystem);
}
private void GDRomFileSystem_GDRomImageOpenProgressChanged(UserProcessProgressChangedEventArgs e)
{
if (this.formLoading.Visible)
return;
int num = (int) this.formLoading.ShowDialog((IWin32Window) this);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = (IContainer) new Container();
this.tableLayoutPanel = new TableLayoutPanel();
this.tbDiscImageFile = new TextBox();
this.btOpen = new Button();
this.groupBox = new GroupBox();
this.openFileDialog = new OpenFileDialog();
this.discOpener = new DiscOpener(this.components);
this.discFormatProvider = new DiscFormatProvider(this.components);
this.tableLayoutPanel.SuspendLayout();
this.groupBox.SuspendLayout();
this.SuspendLayout();
this.tableLayoutPanel.AutoSize = true;
this.tableLayoutPanel.ColumnCount = 2;
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100f));
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle());
this.tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20f));
this.tableLayoutPanel.Controls.Add((Control) this.tbDiscImageFile, 0, 0);
this.tableLayoutPanel.Controls.Add((Control) this.btOpen, 1, 0);
this.tableLayoutPanel.Dock = DockStyle.Fill;
this.tableLayoutPanel.Location = new Point(3, 16);
this.tableLayoutPanel.Margin = new Padding(0);
this.tableLayoutPanel.Name = "tableLayoutPanel";
this.tableLayoutPanel.RowCount = 1;
this.tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100f));
this.tableLayoutPanel.Size = new Size(762, 31);
this.tableLayoutPanel.TabIndex = 0;
this.tbDiscImageFile.BackColor = Color.White;
this.tbDiscImageFile.Dock = DockStyle.Fill;
this.tbDiscImageFile.HideSelection = false;
this.tbDiscImageFile.Location = new Point(3, 3);
this.tbDiscImageFile.Name = "tbDiscImageFile";
this.tbDiscImageFile.ReadOnly = true;
this.tbDiscImageFile.Size = new Size(670, 20);
this.tbDiscImageFile.TabIndex = 1;
this.tbDiscImageFile.TabStop = false;
this.tbDiscImageFile.WordWrap = false;
this.btOpen.Anchor = AnchorStyles.Top | AnchorStyles.Right;
this.btOpen.AutoSize = true;
this.btOpen.FlatStyle = FlatStyle.Popup;
this.btOpen.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btOpen.ForeColor = Color.FromArgb(248, 48, 0);
this.btOpen.Location = new Point(679, 1);
this.btOpen.Margin = new Padding(3, 1, 3, 3);
this.btOpen.Name = "btOpen";
this.btOpen.Size = new Size(80, 24);
this.btOpen.TabIndex = 2;
this.btOpen.Text = "&Open";
this.btOpen.UseVisualStyleBackColor = false;
this.btOpen.Click += new EventHandler(this.btOpen_Click);
this.groupBox.BackColor = SystemColors.Window;
this.groupBox.Controls.Add((Control) this.tableLayoutPanel);
this.groupBox.Dock = DockStyle.Fill;
this.groupBox.Location = new Point(4, 4);
this.groupBox.Margin = new Padding(0);
this.groupBox.MaximumSize = new Size(0, 50);
this.groupBox.MinimumSize = new Size(0, 50);
this.groupBox.Name = "groupBox";
this.groupBox.Size = new Size(768, 50);
this.groupBox.TabIndex = 0;
this.groupBox.TabStop = false;
this.groupBox.Text = "disc image";
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.AutoSize = true;
this.Controls.Add((Control) this.groupBox);
this.Name = nameof (DiscViewOpener);
this.Padding = new Padding(4);
this.Size = new Size(776, 55);
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
this.groupBox.ResumeLayout(false);
this.groupBox.PerformLayout();
this.ResumeLayout(false);
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,203 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.GDDAConverterTool
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Forms;
using SEGATools.Audio;
using SEGATools.DiscFileSystem;
using SEGATools.VirtualFile;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class GDDAConverterTool : Component
{
private static readonly Logger.ILog logger = Logger.CreateLog();
public string InitialDirectory;
private IWin32Window owner;
private Raw2WavConverter raw2wavConverter;
private IContainer components;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
private FolderBrowserDialog folderBrowserDialog;
public GDDAConverterTool()
{
this.InitializeComponent();
this.InitializeDialogs();
this.raw2wavConverter = new Raw2WavConverter();
}
public GDDAConverterTool(IContainer container)
{
container.Add((IComponent) this);
this.InitializeComponent();
this.InitializeDialogs();
this.raw2wavConverter = new Raw2WavConverter(container);
}
public void OpenAndConvertGDDAFiles(
IWin32Window owner,
AudioConversionSettings AudioConversionSettings)
{
this.owner = owner;
this.UpdateInitialDirectory(this.InitialDirectory);
IList<IVirtualFile> inputFiles;
string outputLocation;
if (this.AskUserForInputFiles(out inputFiles) != DialogResult.OK || this.AskUserForSaveLocation(inputFiles, out outputLocation) != DialogResult.OK)
return;
this.StartAudioConversion(inputFiles, outputLocation, AudioConversionSettings);
}
public void ConvertGDDATracks(
IDiscTrack AudioTrack,
AudioConversionSettings AudioConversionSettings)
{
this.ConvertGDDATracks((IList<IDiscTrack>) new List<IDiscTrack>()
{
AudioTrack
}, AudioConversionSettings);
}
public void ConvertGDDATracks(
IList<IDiscTrack> AudioTracks,
AudioConversionSettings AudioConversionSettings)
{
this.CheckTrackListIsValid(AudioTracks);
this.UpdateInitialDirectory(this.InitialDirectory);
if (AudioTracks.Count == 0)
{
this.ShowNoTrackWarning();
}
else
{
IList<IVirtualFile> list = (IList<IVirtualFile>) AudioTracks.Select<IDiscTrack, IVirtualFile>((Func<IDiscTrack, IVirtualFile>) (track => (IVirtualFile) track)).ToList<IVirtualFile>();
string outputLocation;
if (this.AskUserForSaveLocation(list, out outputLocation) != DialogResult.OK)
return;
this.StartAudioConversion(list, outputLocation, AudioConversionSettings);
}
}
private void StartAudioConversion(
IList<IVirtualFile> files,
string outputPath,
AudioConversionSettings AudioConversionSettings)
{
Guid TaskId = Guid.NewGuid();
this.raw2wavConverter.AudioConversionSettings = AudioConversionSettings;
FormProcess.createForRawToWavConverter(this.raw2wavConverter, TaskId);
this.raw2wavConverter.ConvertAsync(files, outputPath, (object) TaskId);
}
private void InitializeDialogs()
{
this.openFileDialog.Title = GDRomExplorer.Resources.Strings.OfdConvertGddaTitle;
this.openFileDialog.Filter = GDRomExplorer.Resources.Strings.OfdConvertGddaFilter;
this.saveFileDialog.Title = GDRomExplorer.Resources.Strings.SfdCddaTitle;
this.saveFileDialog.Filter = GDRomExplorer.Resources.Strings.SfdCddaFilter;
this.folderBrowserDialog.Description = GDRomExplorer.Resources.Strings.FbdConvertGddaTitle;
this.folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
}
private void UpdateInitialDirectory(string newInitialDirectory)
{
this.openFileDialog.InitialDirectory = newInitialDirectory;
this.saveFileDialog.InitialDirectory = newInitialDirectory;
this.folderBrowserDialog.SelectedPath = newInitialDirectory;
}
private DialogResult AskUserForInputFiles(out IList<IVirtualFile> inputFiles)
{
inputFiles = (IList<IVirtualFile>) null;
if (this.openFileDialog.ShowDialog(this.owner) != DialogResult.OK)
return DialogResult.Cancel;
inputFiles = (IList<IVirtualFile>) ((IEnumerable<string>) this.openFileDialog.FileNames).Select<string, IVirtualFile>((Func<string, IVirtualFile>) (inputFilename => (IVirtualFile) VirtualFileFactory.createVirtualFile(inputFilename))).ToList<IVirtualFile>();
this.openFileDialog.InitialDirectory = Path.GetDirectoryName(this.openFileDialog.FileName);
this.openFileDialog.FileName = Path.GetFileName(this.openFileDialog.FileName);
return DialogResult.OK;
}
private DialogResult AskUserForSaveLocation(
IList<IVirtualFile> AudioTracks,
out string outputLocation)
{
outputLocation = (string) null;
if (AudioTracks.Count == 1)
{
if (this.AskUserForSaveFileLocation(AudioTracks[0], out outputLocation) != DialogResult.OK)
return DialogResult.Cancel;
}
else if (this.AskUserForSaveDirectoryLocation(out outputLocation) != DialogResult.OK)
return DialogResult.Cancel;
return DialogResult.OK;
}
private DialogResult AskUserForSaveFileLocation(
IVirtualFile suggestedFileName,
out string outputPath)
{
outputPath = (string) null;
this.saveFileDialog.FileName = Path.GetFileNameWithoutExtension(suggestedFileName.VirtualName);
if (this.saveFileDialog.ShowDialog(this.owner) != DialogResult.OK)
return DialogResult.Cancel;
outputPath = this.saveFileDialog.FileName;
this.UpdateInitialDirectory(Path.GetDirectoryName(outputPath));
this.saveFileDialog.FileName = Path.GetFileName(outputPath);
return DialogResult.OK;
}
private DialogResult AskUserForSaveDirectoryLocation(out string outputDirectory)
{
outputDirectory = (string) null;
if (this.folderBrowserDialog.ShowDialog(this.owner) != DialogResult.OK)
return DialogResult.Cancel;
outputDirectory = this.folderBrowserDialog.SelectedPath;
this.UpdateInitialDirectory(outputDirectory);
return DialogResult.OK;
}
private void CheckTrackListIsValid(IList<IDiscTrack> tracks)
{
if (tracks == null)
throw new ArgumentNullException();
foreach (IDiscTrack track in (IEnumerable<IDiscTrack>) tracks)
{
if (track.TrackData != TrackModeType.Audio)
{
GDDAConverterTool.logger.ErrorFormat("The track {0} is not an audio track!", (object) track);
throw new ArgumentException("must be an audio track");
}
}
}
private void ShowNoTrackWarning()
{
GDDAConverterTool.logger.Warn((object) "No audio track to convert!");
int num = (int) MessageBox.Show(this.owner, GDRomExplorer.Resources.Strings.MsgBoxAudioConverterNoTrackWarning, GDRomExplorer.Resources.Strings.MsgBoxAudioConverterTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
AppStatus.NotifyNewAppStatus(GDRomExplorer.Resources.Strings.MsgBoxAudioConverterNoTrackWarning);
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.openFileDialog = new OpenFileDialog();
this.saveFileDialog = new SaveFileDialog();
this.folderBrowserDialog = new FolderBrowserDialog();
this.openFileDialog.Multiselect = true;
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,210 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.GDEmuExportSettings
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Events;
using SEGATools.DiscFileSystem;
using SEGATools.GDEmu;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class GDEmuExportSettings : UserControl
{
private IContainer components;
private FolderBrowserDialog folderBrowserDialog;
private GroupBox gbOutputDiscImage;
private TextBox tbAppOutputFolder;
private Button btSelectOutputFolder;
private DiscViewOpener discViewOpener;
private GroupBox gbExportOptions;
private FlowLayoutPanel flpExportOptions;
private CheckBox cbRegionFree;
private CheckBox cbForceVGA;
public string InitialDirectory
{
get => this.folderBrowserDialog.SelectedPath;
set
{
this.folderBrowserDialog.SelectedPath = value;
this.discViewOpener.InitialDirectory = value;
}
}
public IDiscFileSystem InputDiscImage { get; private set; }
public GDEmuExportOptions ExportOptions { get; private set; }
private static GDEmuExportOptions GetDefaultOptions() => new GDEmuExportOptions()
{
ForceVGA = true,
RegionFree = true
};
public GDEmuExportSettings()
{
this.InitializeComponent();
this.ExportOptions = GDEmuExportSettings.GetDefaultOptions();
this.cbRegionFree.Checked = this.ExportOptions.RegionFree;
this.cbForceVGA.Checked = this.ExportOptions.ForceVGA;
this.InitializeUI();
}
public void SetLoadedDiscImage(IDiscFileSystem discFileSystem)
{
this.InputDiscImage = discFileSystem;
this.discViewOpener.SetLoadedDiscImage(discFileSystem);
this.InitialDirectory = Path.GetDirectoryName(discFileSystem.FileName);
}
private void InitializeUI()
{
this.discViewOpener.ImageLoaded += new EventHandler<EventArgs<IDiscFileSystem>>(this.discViewOpener_ImageLoaded);
this.discViewOpener.ImageNotLoaded += new EventHandler(this.discViewOpener_ImageNotLoaded);
this.cbRegionFree.CheckedChanged += new EventHandler(this.cbRegionFree_CheckedChanged);
this.cbForceVGA.CheckedChanged += new EventHandler(this.cbForceVGA_CheckedChanged);
}
private void discViewOpener_ImageNotLoaded(object sender, EventArgs e) => this.InputDiscImage = (IDiscFileSystem) null;
private void discViewOpener_ImageLoaded(object sender, EventArgs<IDiscFileSystem> e)
{
this.InputDiscImage = e.Value;
this.InitialDirectory = Path.GetDirectoryName(this.InputDiscImage.FileName);
}
private void btSelectOutputFolder_Click(object sender, EventArgs e)
{
if (this.folderBrowserDialog.ShowDialog() != DialogResult.OK)
return;
this.tbAppOutputFolder.Text = Path.Combine(this.folderBrowserDialog.SelectedPath, this.ExportOptions.GDIFileName);
this.ExportOptions.OutputPath = this.folderBrowserDialog.SelectedPath;
}
private void cbForceVGA_CheckedChanged(object sender, EventArgs e) => this.ExportOptions.ForceVGA = this.cbForceVGA.Checked;
private void cbRegionFree_CheckedChanged(object sender, EventArgs e) => this.ExportOptions.RegionFree = this.cbRegionFree.Checked;
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (GDEmuExportSettings));
this.folderBrowserDialog = new FolderBrowserDialog();
this.gbOutputDiscImage = new GroupBox();
this.btSelectOutputFolder = new Button();
this.tbAppOutputFolder = new TextBox();
this.gbExportOptions = new GroupBox();
this.flpExportOptions = new FlowLayoutPanel();
this.cbRegionFree = new CheckBox();
this.cbForceVGA = new CheckBox();
this.discViewOpener = new DiscViewOpener();
this.gbOutputDiscImage.SuspendLayout();
this.gbExportOptions.SuspendLayout();
this.flpExportOptions.SuspendLayout();
this.SuspendLayout();
this.gbOutputDiscImage.BackColor = SystemColors.Window;
this.gbOutputDiscImage.Controls.Add((Control) this.btSelectOutputFolder);
this.gbOutputDiscImage.Controls.Add((Control) this.tbAppOutputFolder);
this.gbOutputDiscImage.Location = new Point(3, 60);
this.gbOutputDiscImage.Name = "gbOutputDiscImage";
this.gbOutputDiscImage.Padding = new Padding(0);
this.gbOutputDiscImage.Size = new Size(473, 46);
this.gbOutputDiscImage.TabIndex = 1;
this.gbOutputDiscImage.TabStop = false;
this.gbOutputDiscImage.Text = " Output Disc Image:";
this.btSelectOutputFolder.CausesValidation = false;
this.btSelectOutputFolder.FlatStyle = FlatStyle.Popup;
this.btSelectOutputFolder.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0);
this.btSelectOutputFolder.ForeColor = Color.FromArgb(248, 48, 0);
this.btSelectOutputFolder.Location = new Point(388, 14);
this.btSelectOutputFolder.Name = "btSelectOutputFolder";
this.btSelectOutputFolder.Size = new Size(79, 24);
this.btSelectOutputFolder.TabIndex = 2;
this.btSelectOutputFolder.Text = "...";
this.btSelectOutputFolder.UseVisualStyleBackColor = false;
this.btSelectOutputFolder.Click += new EventHandler(this.btSelectOutputFolder_Click);
this.tbAppOutputFolder.BackColor = SystemColors.Window;
this.tbAppOutputFolder.Location = new Point(6, 17);
this.tbAppOutputFolder.Name = "tbAppOutputFolder";
this.tbAppOutputFolder.ReadOnly = true;
this.tbAppOutputFolder.Size = new Size(376, 20);
this.tbAppOutputFolder.TabIndex = 3;
this.tbAppOutputFolder.TabStop = false;
this.gbExportOptions.BackColor = SystemColors.Window;
this.gbExportOptions.Controls.Add((Control) this.flpExportOptions);
this.gbExportOptions.Location = new Point(4, 112);
this.gbExportOptions.Name = "gbExportOptions";
this.gbExportOptions.Padding = new Padding(3, 0, 3, 3);
this.gbExportOptions.Size = new Size(473, 42);
this.gbExportOptions.TabIndex = 4;
this.gbExportOptions.TabStop = false;
this.gbExportOptions.Text = "Export Options:";
this.flpExportOptions.AutoSize = true;
this.flpExportOptions.Controls.Add((Control) this.cbRegionFree);
this.flpExportOptions.Controls.Add((Control) this.cbForceVGA);
this.flpExportOptions.Dock = DockStyle.Fill;
this.flpExportOptions.Location = new Point(3, 13);
this.flpExportOptions.Name = "flpExportOptions";
this.flpExportOptions.Padding = new Padding(3);
this.flpExportOptions.Size = new Size(467, 26);
this.flpExportOptions.TabIndex = 0;
this.cbRegionFree.AutoSize = true;
this.cbRegionFree.Location = new Point(6, 6);
this.cbRegionFree.Name = "cbRegionFree";
this.cbRegionFree.Size = new Size(84, 17);
this.cbRegionFree.TabIndex = 0;
this.cbRegionFree.Text = "Region Free";
this.cbRegionFree.UseVisualStyleBackColor = true;
this.cbForceVGA.AutoSize = true;
this.cbForceVGA.Location = new Point(96, 6);
this.cbForceVGA.Name = "cbForceVGA";
this.cbForceVGA.Size = new Size(78, 17);
this.cbForceVGA.TabIndex = 1;
this.cbForceVGA.Text = "Force VGA";
this.cbForceVGA.UseVisualStyleBackColor = true;
this.discViewOpener.AutoSize = true;
this.discViewOpener.BackColor = SystemColors.Window;
this.discViewOpener.ButtonText = "&Open";
this.discViewOpener.FileDialogFilters = (List<string>) componentResourceManager.GetObject("discViewOpener.FileDialogFilters");
this.discViewOpener.InitialDirectory = "";
this.discViewOpener.Location = new Point(0, 0);
this.discViewOpener.Margin = new Padding(0);
this.discViewOpener.Name = "discViewOpener";
this.discViewOpener.NotifyStatusEvents = false;
this.discViewOpener.Padding = new Padding(3);
this.discViewOpener.Size = new Size(479, 57);
this.discViewOpener.TabIndex = 0;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.AutoSize = true;
this.BackColor = SystemColors.Window;
this.Controls.Add((Control) this.gbExportOptions);
this.Controls.Add((Control) this.gbOutputDiscImage);
this.Controls.Add((Control) this.discViewOpener);
this.Name = nameof (GDEmuExportSettings);
this.Size = new Size(480, 157);
this.gbOutputDiscImage.ResumeLayout(false);
this.gbOutputDiscImage.PerformLayout();
this.gbExportOptions.ResumeLayout(false);
this.gbExportOptions.PerformLayout();
this.flpExportOptions.ResumeLayout(false);
this.flpExportOptions.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,123 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="discViewOpener.FileDialogFilters" mimetype="application/x-microsoft.net.object.binary.base64">
<value>AAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkCAAAAAQAAAAIAAAARAgAAAAQAAAAGAwAAAAQuZ2RpDQML</value>
</data>
</root>

View File

@ -0,0 +1,115 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.InitialProgramOpener
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Forms;
using GDRomExplorer.Resources;
using SEGATools.Binary;
using SEGATools.Scanner;
using SEGATools.Security;
using SEGATools.VirtualFile;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class InitialProgramOpener : Component
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IWin32Window owner;
private FormLoading formLoading;
private IContainer components;
private BackgroundWorker backgroundWorker;
private OpenFileDialog openFileDialogForInitialProgram;
public InitialProgramOpener()
{
this.InitializeComponent();
this.Initialize();
}
private void Initialize()
{
this.openFileDialogForInitialProgram.Title = Strings.OfdInitialProgramTitle;
this.openFileDialogForInitialProgram.Filter = Strings.OfdInitialProgramFilter;
this.backgroundWorker.DoWork += new DoWorkEventHandler(this.bwOpenInitialProgramFile_DoWork);
this.backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.bwOpenInitialProgramFile_RunWorkerCompleted);
}
public void OpenAndViewInitialProgram(IWin32Window owner)
{
this.owner = owner;
if (this.openFileDialogForInitialProgram.ShowDialog(owner) != DialogResult.OK)
return;
this.backgroundWorker.RunWorkerAsync((object) VirtualFileFactory.createVirtualFile(this.openFileDialogForInitialProgram.FileName));
using (this.formLoading = new FormLoading(Strings.InitialProgramLoadingTitle, Strings.InitialProgramLoadingMessage))
{
int num = (int) this.formLoading.ShowDialog(owner);
}
}
private void bwOpenInitialProgramFile_DoWork(object sender, DoWorkEventArgs e)
{
IVirtualFile virtualFile1 = (IVirtualFile) e.Argument;
InitialProgram initialProgram;
using (Stream fileInputStream = virtualFile1.FileInputStream)
{
byte[] buffer = new byte[InitialProgramConverter.INITIAL_PROGRAM_SIZE];
fileInputStream.Read(buffer, 0, buffer.Length);
initialProgram = InitialProgramConverter.ToInitialProgram(buffer, 0);
}
List<SEGALibrary> libraries;
using (FileScanner fileScanner = new FileScanner())
{
IVirtualFile virtualFile2 = (IVirtualFile) VirtualFileFactory.createVirtualFile(initialProgram.Stream, virtualFile1.OriginalFileName);
libraries = fileScanner.ScanFile<SEGALibrary>(virtualFile2, FileScannerPattern.aPatternForSEGALibraries(), (IFileScannerResultConverter<SEGALibrary>) new FileScannerResultConverterForSEGALibrary());
}
e.Result = (object) InitialProgramExtended.create(initialProgram, libraries);
}
private void bwOpenInitialProgramFile_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
if (!this.formLoading.IsDisposed)
this.formLoading.Dispose();
if (e.Error != null)
{
string str = string.Format(Strings.MsgBoxInitialProgramOpenerErrorWithFormat, (object) e.Error.Message);
InitialProgramOpener.logger.ErrorFormat("Unable to open ip: {0}", (object) e.Error);
int num = (int) MessageBox.Show(this.owner, str, Strings.MsgBoxInitialProgramOpenerTitle, MessageBoxButtons.OK, MessageBoxIcon.Hand);
AppStatus.NotifyNewAppStatus(str);
}
else
{
string fileName = this.openFileDialogForInitialProgram.FileName;
this.openFileDialogForInitialProgram.FileName = Path.GetFileName(fileName);
string message = string.Format(Strings.MsgBoxInitialProgramOpenerSuccessWithFormat, (object) fileName);
InitialProgramOpener.logger.InfoFormat("File {0} successfully opened", (object) fileName);
AppStatus.NotifyNewAppStatus(message);
using (FormInitialProgram formInitialProgram = new FormInitialProgram((InitialProgramExtended) e.Result, Path.GetDirectoryName(fileName)))
{
int num = (int) formInitialProgram.ShowDialog(this.owner);
}
}
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.backgroundWorker = new BackgroundWorker();
this.openFileDialogForInitialProgram = new OpenFileDialog();
this.openFileDialogForInitialProgram.Multiselect = true;
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,131 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.NaomiEncryptDecryptTool
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Forms;
using GDRomExplorer.Resources;
using SEGATools.Encrypt;
using SEGATools.VirtualFile;
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class NaomiEncryptDecryptTool : Component
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private IWin32Window owner;
public string InitialDirectory;
private IContainer components;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
public NaomiEncryptDecryptTool() => this.InitializeComponent();
public NaomiEncryptDecryptTool(IContainer container)
{
container.Add((IComponent) this);
this.InitializeComponent();
}
public void OpenAndEncryptNaomiBinary(IWin32Window owner)
{
this.owner = owner;
this.ChangeFileDialogsForEncryption();
NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder filesAndKeyHolder = this.OpenDialogsForInputAndOutputFiles(true);
if (filesAndKeyHolder == null)
return;
DesEncryptDecryptTool desDecryptor = new DesEncryptDecryptTool();
Guid TaskId = Guid.NewGuid();
FormProcess.createForDesEncryptor(desDecryptor, TaskId);
desDecryptor.EncryptAsync(filesAndKeyHolder.InputFile, filesAndKeyHolder.OutputFile, filesAndKeyHolder.DESKey, (object) TaskId);
}
public void OpenAndDecryptNaomiBinary(IWin32Window owner)
{
this.owner = owner;
this.ChangeFileDialogsForDecryption();
NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder filesAndKeyHolder = this.OpenDialogsForInputAndOutputFiles(false);
if (filesAndKeyHolder == null)
return;
DesEncryptDecryptTool desDecryptor = new DesEncryptDecryptTool();
Guid TaskId = Guid.NewGuid();
FormProcess.createForDesDecryptor(desDecryptor, TaskId);
desDecryptor.DecryptAsync(filesAndKeyHolder.InputFile, filesAndKeyHolder.OutputFile, filesAndKeyHolder.DESKey, (object) TaskId);
}
private NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder OpenDialogsForInputAndOutputFiles(
bool isForEncryption)
{
if (this.openFileDialog.ShowDialog(this.owner) != DialogResult.OK)
return (NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder) null;
IVirtualFile virtualFile1 = (IVirtualFile) VirtualFileFactory.createVirtualFile(this.openFileDialog.FileName);
this.openFileDialog.InitialDirectory = Path.GetDirectoryName(this.openFileDialog.FileName);
this.openFileDialog.FileName = Path.GetFileName(this.openFileDialog.FileName);
FormGetDESKey formGetDesKey = !isForEncryption ? FormGetDESKey.aGetDESKeyFormWithDecryptLabel() : FormGetDESKey.aGetDESKeyFormWithEncryptLabel();
if (formGetDesKey.ShowDialog(this.owner) != DialogResult.OK)
{
formGetDesKey.Dispose();
return (NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder) null;
}
formGetDesKey.Dispose();
DESKey desKey = formGetDesKey.DESKey;
this.saveFileDialog.FileName = Path.GetFileNameWithoutExtension(this.openFileDialog.FileName);
if (this.saveFileDialog.ShowDialog(this.owner) != DialogResult.OK)
return (NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder) null;
IVirtualFile virtualFile2 = (IVirtualFile) VirtualFileFactory.createVirtualFile(this.saveFileDialog.FileName);
this.saveFileDialog.InitialDirectory = Path.GetDirectoryName(this.saveFileDialog.FileName);
this.saveFileDialog.FileName = Path.GetFileName(this.saveFileDialog.FileName);
return new NaomiEncryptDecryptTool.InputOutputFilesAndKeyHolder()
{
InputFile = virtualFile1,
OutputFile = virtualFile2,
DESKey = desKey
};
}
private void ChangeFileDialogsForEncryption()
{
this.openFileDialog.Title = Strings.NaomiEncryptDecryptToolOfdEncTitle;
this.openFileDialog.Filter = Strings.NaomiEncryptDecryptToolOfdEncFilter;
this.openFileDialog.InitialDirectory = this.InitialDirectory;
this.saveFileDialog.Title = Strings.NaomiEncryptDecryptToolSfdEncTitle;
this.saveFileDialog.Filter = Strings.NaomiEncryptDecryptToolSfdEncFilter;
this.saveFileDialog.InitialDirectory = this.InitialDirectory;
}
private void ChangeFileDialogsForDecryption()
{
this.openFileDialog.Title = Strings.NaomiEncryptDecryptToolOfdDecTitle;
this.openFileDialog.Filter = Strings.NaomiEncryptDecryptToolOfdDecFilter;
this.openFileDialog.InitialDirectory = this.InitialDirectory;
this.saveFileDialog.Title = Strings.NaomiEncryptDecryptToolSfdDecTitle;
this.saveFileDialog.Filter = Strings.NaomiEncryptDecryptToolSfdDecFilter;
this.saveFileDialog.InitialDirectory = this.InitialDirectory;
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.openFileDialog = new OpenFileDialog();
this.saveFileDialog = new SaveFileDialog();
}
private class InputOutputFilesAndKeyHolder
{
public IVirtualFile InputFile;
public IVirtualFile OutputFile;
public DESKey DESKey;
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,424 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.UserControls.PrimaryVolumeDescriptorViewer
// Assembly: GD-ROM Explorer, Version=1.6.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B7A7D10A-9A63-4E9E-9840-D297E5FC2219
// Assembly location: GD-ROM Explorer.exe
using GDRomExplorer.Resources;
using ImageReader.ISO9660.VolumeDescriptors;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace GDRomExplorer.UserControls
{
public class PrimaryVolumeDescriptorViewer : UserControl
{
private IContainer components;
private TextBox tbVolumeSpaceSize;
private Label lbVolumeSpaceSize;
private TextBox tbVolumeNumber;
private Label lbVolumeNumber;
private TextBox tbVolumeSetId;
private Label lbVolumeSetId;
private TextBox tbVolumeCreationDate;
private Label lbVloumeCreationDate;
private TextBox tbVolumeModificationDate;
private Label lbVolumeModificationDate;
private TextBox tbVolumeExpirationDate;
private Label lbVolumeExpirationDate;
private TextBox tbVolumeEffectiveDate;
private Label lbVolumeEffectiveDate;
private TextBox tbSystemId;
private TextBox tbVolumeId;
private TextBox tbPublisherId;
private TextBox tbPreparerId;
private TextBox tbApplicationId;
private TextBox tbCopyrightFileId;
private TextBox tbAbstractFileId;
private TextBox tbBibliographicFileId;
private Label lbSystemId;
private Label lbVolumeId;
private Label nbPublisherId;
private Label lbPreparerId;
private Label lbApplicationId;
private Label lbCopyrightFileId;
private Label lbAbstractFileId;
private Label lbBibliographicFileId;
private TextBox tbLogicalBlockSize;
private Label lbLogicalBlockSize;
public PrimaryVolumeDescriptorViewer() => this.InitializeComponent();
public void LoadPrimaryVolumeDescriptor(PrimaryVolumeDescriptor PrimaryVolumeDescriptor)
{
if (PrimaryVolumeDescriptor == null)
return;
this.tbSystemId.Text = PrimaryVolumeDescriptor.SystemIdentifier;
this.tbVolumeId.Text = PrimaryVolumeDescriptor.Identifier;
this.tbApplicationId.Text = PrimaryVolumeDescriptor.ApplicationIdentifier;
this.tbPublisherId.Text = PrimaryVolumeDescriptor.PublisherIdentifier;
this.tbPreparerId.Text = PrimaryVolumeDescriptor.PreparerIdentifier;
this.tbVolumeSetId.Text = PrimaryVolumeDescriptor.SetIdentifier;
this.tbVolumeSpaceSize.Text = string.Format("{0} blocks", (object) PrimaryVolumeDescriptor.SpaceSize);
this.tbVolumeNumber.Text = string.Format("{0}/{1}", (object) PrimaryVolumeDescriptor.SequenceNumber, (object) PrimaryVolumeDescriptor.SetSize);
this.tbLogicalBlockSize.Text = string.Format("{0} bytes", (object) PrimaryVolumeDescriptor.LogicalBlockSize);
this.UpdateDateTimeTextBox(this.tbVolumeCreationDate, PrimaryVolumeDescriptor.CreationDateTime);
this.UpdateDateTimeTextBox(this.tbVolumeModificationDate, PrimaryVolumeDescriptor.ModificationDateTime);
this.UpdateDateTimeTextBox(this.tbVolumeEffectiveDate, PrimaryVolumeDescriptor.EffectiveDateTime);
this.UpdateDateTimeTextBox(this.tbVolumeExpirationDate, PrimaryVolumeDescriptor.ExpirationDateTime);
this.tbAbstractFileId.Text = PrimaryVolumeDescriptor.AbstractFileIdentifier;
this.tbCopyrightFileId.Text = PrimaryVolumeDescriptor.CopyrightFileIdentifier;
this.tbBibliographicFileId.Text = PrimaryVolumeDescriptor.BibliographicFileIdentifier;
}
private void UpdateDateTimeTextBox(TextBox dateTimeTextBox, DateTime? dateTime)
{
if (dateTime.HasValue)
dateTimeTextBox.Text = dateTime.Value.ToString();
else
dateTimeTextBox.Text = Strings.InvalidDateTimeText;
}
protected override void Dispose(bool disposing)
{
if (disposing && this.components != null)
this.components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.tbVolumeSpaceSize = new TextBox();
this.lbVolumeSpaceSize = new Label();
this.tbVolumeNumber = new TextBox();
this.lbVolumeNumber = new Label();
this.tbVolumeSetId = new TextBox();
this.lbVolumeSetId = new Label();
this.tbVolumeCreationDate = new TextBox();
this.lbVloumeCreationDate = new Label();
this.tbVolumeModificationDate = new TextBox();
this.lbVolumeModificationDate = new Label();
this.tbVolumeExpirationDate = new TextBox();
this.lbVolumeExpirationDate = new Label();
this.tbVolumeEffectiveDate = new TextBox();
this.lbVolumeEffectiveDate = new Label();
this.tbSystemId = new TextBox();
this.tbVolumeId = new TextBox();
this.tbPublisherId = new TextBox();
this.tbPreparerId = new TextBox();
this.tbApplicationId = new TextBox();
this.tbCopyrightFileId = new TextBox();
this.tbAbstractFileId = new TextBox();
this.tbBibliographicFileId = new TextBox();
this.lbSystemId = new Label();
this.lbVolumeId = new Label();
this.nbPublisherId = new Label();
this.lbPreparerId = new Label();
this.lbApplicationId = new Label();
this.lbCopyrightFileId = new Label();
this.lbAbstractFileId = new Label();
this.lbBibliographicFileId = new Label();
this.tbLogicalBlockSize = new TextBox();
this.lbLogicalBlockSize = new Label();
this.SuspendLayout();
this.tbVolumeSpaceSize.BackColor = SystemColors.Window;
this.tbVolumeSpaceSize.Location = new Point(414, 48);
this.tbVolumeSpaceSize.Margin = new Padding(2);
this.tbVolumeSpaceSize.Name = "tbVolumeSpaceSize";
this.tbVolumeSpaceSize.ReadOnly = true;
this.tbVolumeSpaceSize.Size = new Size(155, 20);
this.tbVolumeSpaceSize.TabIndex = 9;
this.tbVolumeSpaceSize.TextAlign = HorizontalAlignment.Center;
this.lbVolumeSpaceSize.Location = new Point(277, 50);
this.lbVolumeSpaceSize.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeSpaceSize.MinimumSize = new Size(130, 13);
this.lbVolumeSpaceSize.Name = "lbVolumeSpaceSize";
this.lbVolumeSpaceSize.Size = new Size(133, 13);
this.lbVolumeSpaceSize.TabIndex = 8;
this.lbVolumeSpaceSize.Text = "Volume Space Size:";
this.lbVolumeSpaceSize.TextAlign = ContentAlignment.TopRight;
this.tbVolumeNumber.BackColor = SystemColors.Window;
this.tbVolumeNumber.Location = new Point(414, 26);
this.tbVolumeNumber.Margin = new Padding(2);
this.tbVolumeNumber.Name = "tbVolumeNumber";
this.tbVolumeNumber.ReadOnly = true;
this.tbVolumeNumber.Size = new Size(155, 20);
this.tbVolumeNumber.TabIndex = 11;
this.tbVolumeNumber.TextAlign = HorizontalAlignment.Center;
this.lbVolumeNumber.Location = new Point(277, 28);
this.lbVolumeNumber.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeNumber.MinimumSize = new Size(130, 13);
this.lbVolumeNumber.Name = "lbVolumeNumber";
this.lbVolumeNumber.Size = new Size(133, 13);
this.lbVolumeNumber.TabIndex = 10;
this.lbVolumeNumber.Text = "Volume Number:";
this.lbVolumeNumber.TextAlign = ContentAlignment.TopRight;
this.tbVolumeSetId.BackColor = SystemColors.Window;
this.tbVolumeSetId.Location = new Point(414, 4);
this.tbVolumeSetId.Margin = new Padding(2);
this.tbVolumeSetId.Name = "tbVolumeSetId";
this.tbVolumeSetId.ReadOnly = true;
this.tbVolumeSetId.Size = new Size(155, 20);
this.tbVolumeSetId.TabIndex = 23;
this.tbVolumeSetId.TextAlign = HorizontalAlignment.Center;
this.lbVolumeSetId.Location = new Point(277, 6);
this.lbVolumeSetId.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeSetId.MinimumSize = new Size(130, 13);
this.lbVolumeSetId.Name = "lbVolumeSetId";
this.lbVolumeSetId.Size = new Size(133, 13);
this.lbVolumeSetId.TabIndex = 22;
this.lbVolumeSetId.Text = "Volume Set ID:";
this.lbVolumeSetId.TextAlign = ContentAlignment.TopRight;
this.tbVolumeCreationDate.BackColor = SystemColors.Window;
this.tbVolumeCreationDate.Location = new Point(414, 114);
this.tbVolumeCreationDate.Margin = new Padding(2);
this.tbVolumeCreationDate.Name = "tbVolumeCreationDate";
this.tbVolumeCreationDate.ReadOnly = true;
this.tbVolumeCreationDate.Size = new Size(155, 20);
this.tbVolumeCreationDate.TabIndex = 37;
this.tbVolumeCreationDate.TextAlign = HorizontalAlignment.Center;
this.lbVloumeCreationDate.Location = new Point(277, 116);
this.lbVloumeCreationDate.Margin = new Padding(2, 0, 2, 0);
this.lbVloumeCreationDate.MinimumSize = new Size(130, 13);
this.lbVloumeCreationDate.Name = "lbVloumeCreationDate";
this.lbVloumeCreationDate.Size = new Size(133, 13);
this.lbVloumeCreationDate.TabIndex = 36;
this.lbVloumeCreationDate.Text = "Volume Creation Date:";
this.lbVloumeCreationDate.TextAlign = ContentAlignment.TopRight;
this.tbVolumeModificationDate.BackColor = SystemColors.Window;
this.tbVolumeModificationDate.Location = new Point(414, 136);
this.tbVolumeModificationDate.Margin = new Padding(2);
this.tbVolumeModificationDate.Name = "tbVolumeModificationDate";
this.tbVolumeModificationDate.ReadOnly = true;
this.tbVolumeModificationDate.Size = new Size(155, 20);
this.tbVolumeModificationDate.TabIndex = 39;
this.tbVolumeModificationDate.TextAlign = HorizontalAlignment.Center;
this.lbVolumeModificationDate.Location = new Point(277, 138);
this.lbVolumeModificationDate.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeModificationDate.MinimumSize = new Size(130, 13);
this.lbVolumeModificationDate.Name = "lbVolumeModificationDate";
this.lbVolumeModificationDate.Size = new Size(133, 13);
this.lbVolumeModificationDate.TabIndex = 38;
this.lbVolumeModificationDate.Text = "Volume Modification Date:";
this.lbVolumeModificationDate.TextAlign = ContentAlignment.TopRight;
this.tbVolumeExpirationDate.BackColor = SystemColors.Window;
this.tbVolumeExpirationDate.Location = new Point(414, 70);
this.tbVolumeExpirationDate.Margin = new Padding(2);
this.tbVolumeExpirationDate.Name = "tbVolumeExpirationDate";
this.tbVolumeExpirationDate.ReadOnly = true;
this.tbVolumeExpirationDate.Size = new Size(155, 20);
this.tbVolumeExpirationDate.TabIndex = 41;
this.tbVolumeExpirationDate.TextAlign = HorizontalAlignment.Center;
this.lbVolumeExpirationDate.Location = new Point(277, 72);
this.lbVolumeExpirationDate.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeExpirationDate.MinimumSize = new Size(130, 13);
this.lbVolumeExpirationDate.Name = "lbVolumeExpirationDate";
this.lbVolumeExpirationDate.Size = new Size(133, 13);
this.lbVolumeExpirationDate.TabIndex = 40;
this.lbVolumeExpirationDate.Text = "Volume Expiration Date:";
this.lbVolumeExpirationDate.TextAlign = ContentAlignment.TopRight;
this.tbVolumeEffectiveDate.BackColor = SystemColors.Window;
this.tbVolumeEffectiveDate.Location = new Point(414, 92);
this.tbVolumeEffectiveDate.Margin = new Padding(2);
this.tbVolumeEffectiveDate.Name = "tbVolumeEffectiveDate";
this.tbVolumeEffectiveDate.ReadOnly = true;
this.tbVolumeEffectiveDate.Size = new Size(155, 20);
this.tbVolumeEffectiveDate.TabIndex = 43;
this.tbVolumeEffectiveDate.TextAlign = HorizontalAlignment.Center;
this.lbVolumeEffectiveDate.Location = new Point(277, 94);
this.lbVolumeEffectiveDate.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeEffectiveDate.MinimumSize = new Size(130, 13);
this.lbVolumeEffectiveDate.Name = "lbVolumeEffectiveDate";
this.lbVolumeEffectiveDate.Size = new Size(133, 13);
this.lbVolumeEffectiveDate.TabIndex = 42;
this.lbVolumeEffectiveDate.Text = "Volume Effective Date:";
this.lbVolumeEffectiveDate.TextAlign = ContentAlignment.TopRight;
this.tbSystemId.BackColor = SystemColors.Window;
this.tbSystemId.Location = new Point(113, 4);
this.tbSystemId.Margin = new Padding(2);
this.tbSystemId.Name = "tbSystemId";
this.tbSystemId.ReadOnly = true;
this.tbSystemId.Size = new Size(155, 20);
this.tbSystemId.TabIndex = 5;
this.tbSystemId.TextAlign = HorizontalAlignment.Center;
this.tbVolumeId.BackColor = SystemColors.Window;
this.tbVolumeId.Location = new Point(113, 26);
this.tbVolumeId.Margin = new Padding(2);
this.tbVolumeId.Name = "tbVolumeId";
this.tbVolumeId.ReadOnly = true;
this.tbVolumeId.Size = new Size(155, 20);
this.tbVolumeId.TabIndex = 7;
this.tbVolumeId.TextAlign = HorizontalAlignment.Center;
this.tbPublisherId.BackColor = SystemColors.Window;
this.tbPublisherId.Location = new Point(113, 70);
this.tbPublisherId.Margin = new Padding(2);
this.tbPublisherId.Name = "tbPublisherId";
this.tbPublisherId.ReadOnly = true;
this.tbPublisherId.Size = new Size(155, 20);
this.tbPublisherId.TabIndex = 25;
this.tbPublisherId.TextAlign = HorizontalAlignment.Center;
this.tbPreparerId.BackColor = SystemColors.Window;
this.tbPreparerId.Location = new Point(113, 92);
this.tbPreparerId.Margin = new Padding(2);
this.tbPreparerId.Name = "tbPreparerId";
this.tbPreparerId.ReadOnly = true;
this.tbPreparerId.Size = new Size(155, 20);
this.tbPreparerId.TabIndex = 27;
this.tbPreparerId.TextAlign = HorizontalAlignment.Center;
this.tbApplicationId.BackColor = SystemColors.Window;
this.tbApplicationId.Location = new Point(113, 48);
this.tbApplicationId.Margin = new Padding(2);
this.tbApplicationId.Name = "tbApplicationId";
this.tbApplicationId.ReadOnly = true;
this.tbApplicationId.Size = new Size(155, 20);
this.tbApplicationId.TabIndex = 29;
this.tbApplicationId.TextAlign = HorizontalAlignment.Center;
this.tbCopyrightFileId.BackColor = SystemColors.Window;
this.tbCopyrightFileId.Location = new Point(113, 114);
this.tbCopyrightFileId.Margin = new Padding(2);
this.tbCopyrightFileId.Name = "tbCopyrightFileId";
this.tbCopyrightFileId.ReadOnly = true;
this.tbCopyrightFileId.Size = new Size(155, 20);
this.tbCopyrightFileId.TabIndex = 31;
this.tbCopyrightFileId.TextAlign = HorizontalAlignment.Center;
this.tbAbstractFileId.BackColor = SystemColors.Window;
this.tbAbstractFileId.Location = new Point(113, 136);
this.tbAbstractFileId.Margin = new Padding(2);
this.tbAbstractFileId.Name = "tbAbstractFileId";
this.tbAbstractFileId.ReadOnly = true;
this.tbAbstractFileId.Size = new Size(155, 20);
this.tbAbstractFileId.TabIndex = 33;
this.tbAbstractFileId.TextAlign = HorizontalAlignment.Center;
this.tbBibliographicFileId.BackColor = SystemColors.Window;
this.tbBibliographicFileId.Location = new Point(113, 159);
this.tbBibliographicFileId.Margin = new Padding(2);
this.tbBibliographicFileId.Name = "tbBibliographicFileId";
this.tbBibliographicFileId.ReadOnly = true;
this.tbBibliographicFileId.Size = new Size(155, 20);
this.tbBibliographicFileId.TabIndex = 35;
this.tbBibliographicFileId.TextAlign = HorizontalAlignment.Center;
this.lbSystemId.Location = new Point(2, 6);
this.lbSystemId.Margin = new Padding(2, 0, 2, 0);
this.lbSystemId.MinimumSize = new Size(107, 13);
this.lbSystemId.Name = "lbSystemId";
this.lbSystemId.Size = new Size(107, 13);
this.lbSystemId.TabIndex = 4;
this.lbSystemId.Text = "System ID:";
this.lbSystemId.TextAlign = ContentAlignment.TopRight;
this.lbVolumeId.Location = new Point(2, 28);
this.lbVolumeId.Margin = new Padding(2, 0, 2, 0);
this.lbVolumeId.MinimumSize = new Size(107, 13);
this.lbVolumeId.Name = "lbVolumeId";
this.lbVolumeId.Size = new Size(107, 13);
this.lbVolumeId.TabIndex = 6;
this.lbVolumeId.Text = "Volume ID:";
this.lbVolumeId.TextAlign = ContentAlignment.TopRight;
this.nbPublisherId.Location = new Point(2, 72);
this.nbPublisherId.Margin = new Padding(2, 0, 2, 0);
this.nbPublisherId.MinimumSize = new Size(107, 13);
this.nbPublisherId.Name = "nbPublisherId";
this.nbPublisherId.Size = new Size(107, 13);
this.nbPublisherId.TabIndex = 24;
this.nbPublisherId.Text = "Publisher ID:";
this.nbPublisherId.TextAlign = ContentAlignment.TopRight;
this.lbPreparerId.Location = new Point(2, 94);
this.lbPreparerId.Margin = new Padding(2, 0, 2, 0);
this.lbPreparerId.MinimumSize = new Size(107, 13);
this.lbPreparerId.Name = "lbPreparerId";
this.lbPreparerId.Size = new Size(107, 13);
this.lbPreparerId.TabIndex = 26;
this.lbPreparerId.Text = "Preparer ID:";
this.lbPreparerId.TextAlign = ContentAlignment.TopRight;
this.lbApplicationId.Location = new Point(2, 50);
this.lbApplicationId.Margin = new Padding(2, 0, 2, 0);
this.lbApplicationId.MinimumSize = new Size(107, 13);
this.lbApplicationId.Name = "lbApplicationId";
this.lbApplicationId.Size = new Size(107, 13);
this.lbApplicationId.TabIndex = 28;
this.lbApplicationId.Text = "Application ID:";
this.lbApplicationId.TextAlign = ContentAlignment.TopRight;
this.lbCopyrightFileId.Location = new Point(2, 116);
this.lbCopyrightFileId.Margin = new Padding(2, 0, 2, 0);
this.lbCopyrightFileId.MinimumSize = new Size(107, 13);
this.lbCopyrightFileId.Name = "lbCopyrightFileId";
this.lbCopyrightFileId.Size = new Size(107, 13);
this.lbCopyrightFileId.TabIndex = 30;
this.lbCopyrightFileId.Text = "Copyright File ID:";
this.lbCopyrightFileId.TextAlign = ContentAlignment.TopRight;
this.lbAbstractFileId.Location = new Point(2, 138);
this.lbAbstractFileId.Margin = new Padding(2, 0, 2, 0);
this.lbAbstractFileId.MinimumSize = new Size(107, 13);
this.lbAbstractFileId.Name = "lbAbstractFileId";
this.lbAbstractFileId.Size = new Size(107, 13);
this.lbAbstractFileId.TabIndex = 32;
this.lbAbstractFileId.Text = "Abstract File ID:";
this.lbAbstractFileId.TextAlign = ContentAlignment.TopRight;
this.lbBibliographicFileId.Location = new Point(2, 161);
this.lbBibliographicFileId.Margin = new Padding(2, 0, 2, 0);
this.lbBibliographicFileId.MinimumSize = new Size(107, 13);
this.lbBibliographicFileId.Name = "lbBibliographicFileId";
this.lbBibliographicFileId.Size = new Size(107, 13);
this.lbBibliographicFileId.TabIndex = 34;
this.lbBibliographicFileId.Text = "Bibliographic File ID:";
this.lbBibliographicFileId.TextAlign = ContentAlignment.TopRight;
this.tbLogicalBlockSize.BackColor = SystemColors.Window;
this.tbLogicalBlockSize.Location = new Point(414, 159);
this.tbLogicalBlockSize.Margin = new Padding(2);
this.tbLogicalBlockSize.Name = "tbLogicalBlockSize";
this.tbLogicalBlockSize.ReadOnly = true;
this.tbLogicalBlockSize.Size = new Size(155, 20);
this.tbLogicalBlockSize.TabIndex = 45;
this.tbLogicalBlockSize.TextAlign = HorizontalAlignment.Center;
this.lbLogicalBlockSize.Location = new Point(277, 161);
this.lbLogicalBlockSize.Margin = new Padding(2, 0, 2, 0);
this.lbLogicalBlockSize.MinimumSize = new Size(130, 13);
this.lbLogicalBlockSize.Name = "lbLogicalBlockSize";
this.lbLogicalBlockSize.Size = new Size(133, 13);
this.lbLogicalBlockSize.TabIndex = 44;
this.lbLogicalBlockSize.Text = "Logical Block Size:";
this.lbLogicalBlockSize.TextAlign = ContentAlignment.TopRight;
this.AutoScaleDimensions = new SizeF(6f, 13f);
this.AutoScaleMode = AutoScaleMode.Font;
this.AutoSize = true;
this.Controls.Add((Control) this.tbLogicalBlockSize);
this.Controls.Add((Control) this.lbLogicalBlockSize);
this.Controls.Add((Control) this.tbVolumeEffectiveDate);
this.Controls.Add((Control) this.lbVolumeEffectiveDate);
this.Controls.Add((Control) this.tbVolumeExpirationDate);
this.Controls.Add((Control) this.lbVolumeExpirationDate);
this.Controls.Add((Control) this.tbVolumeModificationDate);
this.Controls.Add((Control) this.lbVolumeModificationDate);
this.Controls.Add((Control) this.tbVolumeCreationDate);
this.Controls.Add((Control) this.lbVloumeCreationDate);
this.Controls.Add((Control) this.tbBibliographicFileId);
this.Controls.Add((Control) this.lbBibliographicFileId);
this.Controls.Add((Control) this.tbAbstractFileId);
this.Controls.Add((Control) this.lbAbstractFileId);
this.Controls.Add((Control) this.tbCopyrightFileId);
this.Controls.Add((Control) this.lbCopyrightFileId);
this.Controls.Add((Control) this.tbApplicationId);
this.Controls.Add((Control) this.lbApplicationId);
this.Controls.Add((Control) this.tbPreparerId);
this.Controls.Add((Control) this.lbPreparerId);
this.Controls.Add((Control) this.tbPublisherId);
this.Controls.Add((Control) this.nbPublisherId);
this.Controls.Add((Control) this.tbVolumeSetId);
this.Controls.Add((Control) this.lbVolumeSetId);
this.Controls.Add((Control) this.tbVolumeNumber);
this.Controls.Add((Control) this.lbVolumeNumber);
this.Controls.Add((Control) this.tbVolumeSpaceSize);
this.Controls.Add((Control) this.lbVolumeSpaceSize);
this.Controls.Add((Control) this.tbVolumeId);
this.Controls.Add((Control) this.lbVolumeId);
this.Controls.Add((Control) this.tbSystemId);
this.Controls.Add((Control) this.lbSystemId);
this.Margin = new Padding(2);
this.Name = nameof (PrimaryVolumeDescriptorViewer);
this.Size = new Size(575, 181);
this.ResumeLayout(false);
this.PerformLayout();
}
}
}

View File

@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

16
Explorer/app.config Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.12.0" newVersion="2.0.12.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<appSettings>
<add key="log4net.Config" value="log4net.config"/>
<add key="log4net.Config.Watch" value="True"/>
</appSettings>
</configuration>

56
Explorer/log4net.config Normal file
View File

@ -0,0 +1,56 @@
<?xml version="1.0"?>
<!-- xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"-->
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://raw.githack.com/hormelcookies/log4net-Schema/1e6a4227575fd5ad493993af8066bfad946da186/log4net.xsd">
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="FATAL" />
<foreColor value="White, HighIntensity" />
<backColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="Yellow" />
</mapping>
<mapping>
<level value="INFO" />
<foreColor value="Green" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="GD-ROM-Explorer-%date{yyyy-MM-dd_HH-mm}.log" />
<rollingStyle value="Once" />
<maxSizeRollBackups value="5" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>

4
Explorer/packages.config Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.12" targetFramework="net35" />
</packages>

View File

@ -0,0 +1,14 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("GD-ROM Explorer BIN File Format")]
[assembly: AssemblyDescription("BIN File Format Plugin")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Japanese Cake")]
[assembly: AssemblyProduct("GD-ROM Explorer - BIN File Format Plugin")]
[assembly: AssemblyCopyright("2014 - 2016")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(true)]
[assembly: Guid("47b79a6e-d9b7-483d-8013-ffcdab185e81")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.0.0")]

59
Formats/BIN/BIN.csproj Normal file
View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Project was exported from assembly: C:\Games\gdrom\Formats\BIN.dll-->
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9BE87EC9-C89C-4521-BB87-5BBD997FA627}</ProjectGuid>
<OutputType>Library</OutputType>
<AssemblyName>BIN</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
<FileAlignment>512</FileAlignment>
<RootNamespace>GDRomExplorer.ImageFileFormat.BIN</RootNamespace>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\bin\Debug\Formats\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\Formats\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Compile Include="BinaryImageFormat.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\ImageReader\ImageReader.csproj">
<Project>{2185f55e-a4da-486f-acc8-3ee955205ce4}</Project>
<Name>ImageReader</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\SEGATools\SEGATools.csproj">
<Project>{4d3ab913-88d2-4dd1-a403-ea46d14c98e6}</Project>
<Name>SEGATools</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

24
Formats/BIN/BIN.sln Normal file
View File

@ -0,0 +1,24 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31424.327
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BIN", "BIN.csproj", "{9BE87EC9-C89C-4521-BB87-5BBD997FA627}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BE87EC9-C89C-4521-BB87-5BBD997FA627}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C79035C8-8C85-4D9F-B588-D7C8F12994ED}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,27 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.BIN.BinaryImageFormat
// Assembly: BIN, Version=1.0.0.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: 6DE81A29-0420-4189-8D61-5DDF40D77BD6
// Assembly location: C:\Games\gdrom\Formats\BIN.dll
using ImageReader.DiscSectors;
using SEGATools.DiscFileSystem;
using SEGATools.FileFormat;
namespace GDRomExplorer.ImageFileFormat.BIN
{
internal class BinaryImageFormat : AbstractImageFileFormat
{
public override string[] FileExtentions => new string[1]
{
".bin"
};
public override string[] FileExtentionDescriptions => new string[1]
{
"Binary image file"
};
public override IDiscFileSystemConverter ImageFileConverter => (IDiscFileSystemConverter) new GenericImageConverter((IDiscSector) new CDROMMode1RawSector());
}
}

View File

@ -0,0 +1,14 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("2014 - 2016")]
[assembly: AssemblyTitle("GD-ROM Explorer CDI File Format")]
[assembly: AssemblyDescription("CDI File Format Plugin")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Japanese Cake")]
[assembly: AssemblyProduct("GD-ROM Explorer - CDI File Format Plugin")]
[assembly: Guid("0dae2017-8888-4e40-a4aa-798856425b20")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(true)]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyVersion("1.0.1.0")]

64
Formats/CDI/CDI.csproj Normal file
View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Project was exported from assembly: C:\Games\gdrom\Formats\CDI.dll-->
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{A3861387-BB2E-4C3A-9AB2-43B77C393C24}</ProjectGuid>
<OutputType>Library</OutputType>
<AssemblyName>CDI</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<ApplicationVersion>1.0.1.0</ApplicationVersion>
<FileAlignment>512</FileAlignment>
<RootNamespace>GDRomExplorer.ImageFileFormat.CDI</RootNamespace>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\bin\Debug\Formats\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\Formats\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Compile Include="CDIVersion.cs" />
<Compile Include="CDIHeader.cs" />
<Compile Include="CDIHeaderConverter.cs" />
<Compile Include="CDIImageBuilder.cs" />
<Compile Include="CDIImageFormat.cs" />
<Compile Include="CDIToc.cs" />
<Compile Include="CDITocConverter.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\ImageReader\ImageReader.csproj">
<Project>{2185f55e-a4da-486f-acc8-3ee955205ce4}</Project>
<Name>ImageReader</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\SEGATools\SEGATools.csproj">
<Project>{4d3ab913-88d2-4dd1-a403-ea46d14c98e6}</Project>
<Name>SEGATools</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

20
Formats/CDI/CDI.sln Normal file
View File

@ -0,0 +1,20 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CDI", "CDI.csproj", "{A3861387-BB2E-4C3A-9AB2-43B77C393C24}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3861387-BB2E-4C3A-9AB2-43B77C393C24}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

15
Formats/CDI/CDIHeader.cs Normal file
View File

@ -0,0 +1,15 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIHeader
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDIHeader
{
internal CDIVersion cdiVersion;
internal uint rawCdiVersion;
internal uint headerOffset;
}
}

View File

@ -0,0 +1,35 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIHeaderConverter
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using SEGATools.DiscFileSystem;
using System;
using System.IO;
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDIHeaderConverter
{
private static readonly byte HEADER_MIN_SIZE = 8;
private static readonly short HEADER_OFFSET = -8;
private static readonly short HEADER_SIZE = 8;
internal static CDIHeader ToCDIHeader(Stream imageStream)
{
if (imageStream.Length < (long) CDIHeaderConverter.HEADER_MIN_SIZE)
throw new DiscFormatException("The stream is too small");
CDIHeader cdiHeader = new CDIHeader();
byte[] buffer = new byte[(int) CDIHeaderConverter.HEADER_SIZE];
imageStream.Seek((long) CDIHeaderConverter.HEADER_OFFSET, SeekOrigin.End);
imageStream.Read(buffer, 0, (int) CDIHeaderConverter.HEADER_SIZE);
cdiHeader.rawCdiVersion = BitConverter.ToUInt32(buffer, 0);
cdiHeader.cdiVersion = cdiHeader.rawCdiVersion == 2147483652U || cdiHeader.rawCdiVersion == 2147483653U || cdiHeader.rawCdiVersion == 2147483654U ? (CDIVersion) cdiHeader.rawCdiVersion : CDIVersion.CDI_VERSION_UNKNOWN;
cdiHeader.headerOffset = BitConverter.ToUInt32(buffer, 4);
if (cdiHeader.cdiVersion > CDIVersion.CDI_VERSION_3)
cdiHeader.headerOffset = (uint) imageStream.Length - cdiHeader.headerOffset;
return cdiHeader;
}
}
}

View File

@ -0,0 +1,27 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIImageBuilder
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using SEGATools.DiscFileSystem;
using System.IO;
namespace GDRomExplorer.ImageFileFormat.CDI
{
public class CDIImageBuilder : IDiscFileSystemConverter
{
public IDiscFileSystem ToDiscFileSystem(string imageFileName)
{
CDIHeader cdiHeader;
using (FileStream fileStream = File.Open(imageFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
cdiHeader = CDIHeaderConverter.ToCDIHeader((Stream) fileStream);
if (cdiHeader.cdiVersion == CDIVersion.CDI_VERSION_UNKNOWN)
throw new DiscFormatException(string.Format("Unsupported CDI version 0x{0:X}", (object) cdiHeader.rawCdiVersion));
CDIToc cdiToc = (CDIToc) null;
using (FileStream fileStream = File.Open(imageFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
cdiToc = CDITocConverter.ToCdiToc(cdiHeader, (Stream) fileStream, imageFileName);
return (IDiscFileSystem) new SEGATools.DiscFileSystem.DiscFileSystem(imageFileName, cdiToc.sessions, true, false);
}
}
}

View File

@ -0,0 +1,26 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIImageFormat
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using SEGATools.DiscFileSystem;
using SEGATools.FileFormat;
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDIImageFormat : AbstractImageFileFormat
{
public override string[] FileExtentions => new string[1]
{
".cdi"
};
public override string[] FileExtentionDescriptions => new string[1]
{
"DiscJuggler image file"
};
public override IDiscFileSystemConverter ImageFileConverter => (IDiscFileSystemConverter) new CDIImageBuilder();
}
}

25
Formats/CDI/CDIToc.cs Normal file
View File

@ -0,0 +1,25 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIToc
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using SEGATools.DiscFileSystem;
using System.Collections.Generic;
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDIToc
{
internal CDIHeader cdiHeader;
internal ushort numberOfSessions;
internal ushort[] numberOfTracks;
internal List<IDiscSession> sessions;
internal CDIToc(CDIHeader cdiHeader)
{
this.cdiHeader = cdiHeader;
this.sessions = new List<IDiscSession>();
}
}
}

View File

@ -0,0 +1,245 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDITocConverter
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using ImageReader.DiscSectors;
using SEGATools;
using SEGATools.DiscFileSystem;
using System;
using System.Collections.Generic;
using System.IO;
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDITocConverter
{
private static readonly Logger.ILog logger = Logger.CreateLog();
private static readonly int NUMBER_OF_SESSIONS_OFFSET = 0;
private static readonly int TRACK_INFO_LENGTH = 58;
private static readonly int TRACK_INFO_TRACK_PREGAP_OFFSET = 0;
private static readonly int TRACK_INFO_TRACK_LENGTH_OFFSET = 4;
private static readonly int TRACK_INFO_TRACK_MODE_OFFSET = 14;
private static readonly int TRACK_INFO_TRACK_LBA_OFFSET = 30;
private static readonly int TRACK_INFO_TRACK_TOTAL_LENGTH_OFFSET = 34;
private static readonly int TRACK_INFO_TRACK_SECTOR_SIZE_OFFSET = 54;
private static readonly byte[] TRACK_START_MARKER = new byte[10]
{
(byte) 0,
(byte) 0,
(byte) 1,
(byte) 0,
(byte) 0,
(byte) 0,
byte.MaxValue,
byte.MaxValue,
byte.MaxValue,
byte.MaxValue
};
private static readonly byte[] TRACK_END_MARKER = new byte[5]
{
(byte) 0,
byte.MaxValue,
byte.MaxValue,
byte.MaxValue,
byte.MaxValue
};
internal static CDIToc ToCdiToc(
CDIHeader cdiHeader,
Stream imageStream,
string imageFileName)
{
CDIToc cdiToc = new CDIToc(cdiHeader);
imageStream.Seek((long) cdiHeader.headerOffset, SeekOrigin.Begin);
cdiToc.numberOfSessions = CDITocConverter.ReadNumberOfSessions(imageStream);
cdiToc.numberOfTracks = new ushort[(int) cdiToc.numberOfSessions];
ushort num1 = 0;
uint startOffset = 0;
for (; imageStream.Position < imageStream.Length && (int) num1 < (int) cdiToc.numberOfSessions; ++num1)
{
cdiToc.numberOfTracks[(int) num1] = CDITocConverter.ReadNumberOfTracks(imageStream);
ushort trackIndex = 0;
List<IDiscTrack> tracks = new List<IDiscTrack>();
byte[] buffer = new byte[4];
for (; (int) trackIndex < (int) cdiToc.numberOfTracks[(int) num1]; ++trackIndex)
{
imageStream.Read(buffer, 0, buffer.Length);
if (BitConverter.ToUInt32(buffer, 0) != 0U)
imageStream.Seek(8L, SeekOrigin.Current);
if (!CDITocConverter.HasTrackStartMarkers(imageStream))
throw new DiscFormatException("Invalid start-of-track marker");
imageStream.Seek(4L, SeekOrigin.Current);
int num2 = imageStream.ReadByte();
imageStream.Seek((long) (num2 + 1), SeekOrigin.Current);
imageStream.Seek(10L, SeekOrigin.Current);
imageStream.Read(buffer, 0, buffer.Length);
uint uint32 = BitConverter.ToUInt32(buffer, 0);
if (uint32 != 2U)
throw new DiscFormatException(string.Format("Invalid marker: {0}", (object) uint32));
imageStream.Seek(4L, SeekOrigin.Current);
if (cdiHeader.cdiVersion > CDIVersion.CDI_VERSION_3)
{
imageStream.Read(buffer, 0, buffer.Length);
if (BitConverter.ToUInt32(buffer, 0) == 2147483648U)
imageStream.Seek(8L, SeekOrigin.Current);
}
else
imageStream.Seek(4L, SeekOrigin.Current);
imageStream.Seek(2L, SeekOrigin.Current);
uint totalLength;
DiscTrack discTrack = CDITocConverter.ReadTrackInfo(imageStream, imageFileName, trackIndex, startOffset, out totalLength);
tracks.Add((IDiscTrack) discTrack);
startOffset += totalLength;
imageStream.Seek(25L, SeekOrigin.Current);
imageStream.Seek(4L, SeekOrigin.Current);
if (cdiHeader.cdiVersion > CDIVersion.CDI_VERSION_2)
{
if (!CDITocConverter.CheckTrackEndMarkers(imageStream))
throw new DiscFormatException("Invalid end-of-track marker");
imageStream.Read(buffer, 0, buffer.Length);
if (BitConverter.ToUInt32(buffer, 0) == uint.MaxValue)
imageStream.Seek(78L, SeekOrigin.Current);
}
}
if (tracks.Count > 0)
cdiToc.sessions.Add((IDiscSession) new DiscSession((int) num1 + 1, string.Format(DiscSession.DEFAULT_SESSION_NAME_WITH_FORMAT, (object) ((int) num1 + 1)), tracks));
imageStream.Seek(12L, SeekOrigin.Current);
if (cdiHeader.cdiVersion > CDIVersion.CDI_VERSION_2)
imageStream.Seek(1L, SeekOrigin.Current);
}
return cdiToc;
}
private static ushort ReadNumberOfSessions(Stream imageStream)
{
byte[] buffer = new byte[2];
imageStream.Read(buffer, 0, buffer.Length);
return BitConverter.ToUInt16(buffer, CDITocConverter.NUMBER_OF_SESSIONS_OFFSET);
}
private static ushort ReadNumberOfTracks(Stream imageStream)
{
byte[] buffer = new byte[2];
imageStream.Read(buffer, 0, buffer.Length);
ushort uint16 = BitConverter.ToUInt16(buffer, 0);
return uint16 <= (ushort) 99 ? uint16 : throw new DiscFormatException(string.Format("Too many tracks: maximum is 99, got {0}", (object) uint16));
}
private static DiscTrack ReadTrackInfo(
Stream imageStream,
string imageFileName,
ushort trackIndex,
uint startOffset,
out uint totalLength)
{
byte[] buffer1 = new byte[CDITocConverter.TRACK_INFO_LENGTH];
imageStream.Read(buffer1, 0, buffer1.Length);
uint uint32_1 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_PREGAP_OFFSET);
uint uint32_2 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_LENGTH_OFFSET);
uint uint32_3 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_MODE_OFFSET);
uint uint32_4 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_LBA_OFFSET);
uint uint32_5 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_TOTAL_LENGTH_OFFSET);
uint uint32_6 = BitConverter.ToUInt32(buffer1, CDITocConverter.TRACK_INFO_TRACK_SECTOR_SIZE_OFFSET);
if ((int) uint32_1 + (int) uint32_2 != (int) uint32_5)
throw new DiscFormatException(string.Format("Truncated track {0}: expected {1} bytes, got {2} bytes", (object) ((int) trackIndex + 1), (object) uint32_5, (object) (uint) ((int) uint32_1 + (int) uint32_2)));
uint trackSectorSize = CDITocConverter.GetTrackSectorSize(uint32_6);
uint num = startOffset + uint32_1 * trackSectorSize;
totalLength = uint32_5 * trackSectorSize;
TrackModeType trackModeType = CDITocConverter.ValidateTrackMode(uint32_3);
IDiscSector trackSector = (IDiscSector) null;
try
{
using (FileStream fileStream = File.Open(imageFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
byte[] buffer2 = new byte[DiscSectorCommon.RawSectorSize];
fileStream.Seek((long) num, SeekOrigin.Begin);
fileStream.Read(buffer2, 0, buffer2.Length);
trackSector = CDITocConverter.ValidateTrackSector(trackSectorSize, trackModeType, buffer2);
}
}
catch (Exception ex)
{
logger.Error(ex);
throw new DiscFormatException(string.Format("Unable to read the track {0} of the file {1}", (object) ((int) trackIndex + 1), (object) imageFileName));
}
return new DiscTrack(imageFileName, (long) (int) num, (long) (uint32_2 * trackSectorSize), uint32_4, (int) trackIndex + 1, trackModeType, trackSector);
}
private static TrackModeType ValidateTrackMode(uint trackMode)
{
switch (trackMode)
{
case 0:
return TrackModeType.Audio;
case 2:
return TrackModeType.Data;
default:
throw new DiscFormatException(string.Format("Invalid track mode: {0:X}", (object) trackMode));
}
}
private static uint GetTrackSectorSize(uint trackSectorType)
{
switch (trackSectorType)
{
case 0:
return 2048;
case 1:
return 2336;
case 2:
return 2352;
default:
throw new DiscFormatException(string.Format("Invalid track sector: {0:X}", (object) trackSectorType));
}
}
private static IDiscSector ValidateTrackSector(
uint trackSector,
TrackModeType trackModeType,
byte[] buffer)
{
switch (trackSector)
{
case 2048:
return (IDiscSector) new ISO9660Sector();
case 2336:
return (IDiscSector) new CDROMXAMode2Form1Sector();
case 2352:
if (trackModeType == TrackModeType.Audio)
return (IDiscSector) new RawSector();
return CDROMFrameHeaderConverter.ToCDROMFrameHeader(buffer, 0) == CDROMDataModeType.MODE1_RAW ? (IDiscSector) new CDROMMode1RawSector() : (IDiscSector) new CDROMXAMode2Form1RawSector();
default:
throw new DiscFormatException(string.Format("Invalid track sector size: {0:X}", (object) trackSector));
}
}
private static bool HasTrackStartMarkers(Stream imageStream)
{
byte[] buffer = new byte[CDITocConverter.TRACK_START_MARKER.Length];
for (ushort index1 = 0; index1 < (ushort) 2; ++index1)
{
imageStream.Read(buffer, 0, buffer.Length);
for (ushort index2 = 0; (int) index2 < buffer.Length; ++index2)
{
if ((int) buffer[(int) index2] != (int) CDITocConverter.TRACK_START_MARKER[(int) index2])
return false;
}
}
return true;
}
private static bool CheckTrackEndMarkers(Stream imageStream)
{
byte[] buffer = new byte[CDITocConverter.TRACK_END_MARKER.Length];
imageStream.Read(buffer, 0, buffer.Length);
for (ushort index = 0; (int) index < buffer.Length; ++index)
{
if ((int) buffer[(int) index] != (int) CDITocConverter.TRACK_END_MARKER[(int) index])
return false;
}
return true;
}
}
}

16
Formats/CDI/CDIVersion.cs Normal file
View File

@ -0,0 +1,16 @@
// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIVersion
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal enum CDIVersion : uint
{
CDI_VERSION_UNKNOWN = 0,
CDI_VERSION_2 = 2147483652, // 0x80000004
CDI_VERSION_3 = 2147483653, // 0x80000005
CDI_VERSION_35 = 2147483654, // 0x80000006
}
}

View File

@ -0,0 +1,14 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyCopyright("2014 - 2016")]
[assembly: AssemblyTitle("GD-ROM Explorer GDI File Format")]
[assembly: AssemblyDescription("GDI File Format Plugin")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Japanese Cake")]
[assembly: AssemblyProduct("GD-ROM Explorer - GDI File Format Plugin")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(true)]
[assembly: Guid("d7bec06d-acf2-4d01-a319-8978bb4c951a")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.0.0")]

67
Formats/GDI/GDI.csproj Normal file
View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Project was exported from assembly: C:\Games\gdrom\Formats\GDI.dll-->
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F2CB9EB0-0934-48B0-952F-8BFC5DC97BAA}</ProjectGuid>
<OutputType>Library</OutputType>
<AssemblyName>GDI</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
<FileAlignment>512</FileAlignment>
<RootNamespace>GDRomExplorer.ImageFileFormat.GDI</RootNamespace>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\bin\Debug\Formats\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\Formats\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="IGDIFileSystemValidator.cs" />
<Compile Include="GDIFileSystemValidator.cs" />
<Compile Include="GDImageBuilder.cs" />
<Compile Include="GDImageFormat.cs" />
<Compile Include="IInitialProgramProvider.cs" />
<Compile Include="InitialProgramProvider.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\ImageReader\ImageReader.csproj">
<Project>{2185f55e-a4da-486f-acc8-3ee955205ce4}</Project>
<Name>ImageReader</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\SEGATools\SEGATools.csproj">
<Project>{4d3ab913-88d2-4dd1-a403-ea46d14c98e6}</Project>
<Name>SEGATools</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Some files were not shown because too many files have changed in this diff Show More