├── .vs
├── slnx.sqlite
├── MemcardRex
│ ├── v14
│ │ └── .suo
│ └── v16
│ │ └── .suo
└── VSWorkspaceState.json
├── MemcardRex.macOS
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ ├── icon_16x16.png
│ │ ├── icon_32x32.png
│ │ ├── icon_128x128.png
│ │ ├── icon_16x16@2x.png
│ │ ├── icon_256x256.png
│ │ ├── icon_32x32@2x.png
│ │ ├── icon_512x512.png
│ │ ├── icon_128x128@2x.png
│ │ ├── icon_256x256@2x.png
│ │ ├── icon_512x512@2x.png
│ │ └── Contents.json
├── Resources
│ ├── .DS_Store
│ ├── amflag.bmp
│ ├── euflag.bmp
│ ├── jpflag.bmp
│ ├── tmpbuffer.png
│ └── info_template.png
├── Entitlements.plist
├── MacMain.cs
├── packages.config
├── MemcardRex.macOS.csproj
├── Info.plist
└── macOS
│ ├── GUI
│ ├── CommentDialogController.designer.cs
│ ├── HardwareDialogController.designer.cs
│ ├── HeaderDialogController.designer.cs
│ ├── WindowController.designer.cs
│ ├── InfoDialogController.designer.cs
│ ├── CommentDialogController.cs
│ ├── PreferencesViewController.designer.cs
│ ├── WindowController.cs
│ ├── HeaderDialogController.cs
│ ├── PreferencesViewController.cs
│ ├── InfoDialogController.cs
│ └── ViewController.designer.cs
│ └── AppDelegate.designer.cs
├── MemcardRex.Windows
├── Resources
│ ├── Thumbs.db
│ ├── amflag.bmp
│ ├── euflag.bmp
│ ├── jpflag.bmp
│ ├── linked.bmp
│ ├── naflag.bmp
│ ├── plugin.png
│ ├── comments.png
│ ├── copycard.png
│ ├── dxdread.png
│ ├── dxdwrite.png
│ ├── iconedit.png
│ ├── infoicon.png
│ ├── newcard.png
│ ├── opencard.png
│ ├── options.png
│ ├── quiticon.png
│ ├── readicon.png
│ ├── savecard.png
│ ├── closecard.png
│ ├── comparetemp.png
│ ├── deletesave.png
│ ├── exportsave.png
│ ├── formatsave.png
│ ├── headeredit.png
│ ├── importsave.png
│ ├── memcardrex.ico
│ ├── pastecard.png
│ ├── savecardas.png
│ ├── closeallcards.png
│ ├── undeletesave.png
│ └── linked disabled.bmp
├── Properties
│ ├── Settings.settings
│ └── Settings.Designer.cs
├── app.config
├── Program.cs
├── Windows
│ └── GUI
│ │ ├── commentsWindow.cs
│ │ ├── aboutWindow.cs
│ │ ├── headerWindow.cs
│ │ ├── compareWindow.cs
│ │ ├── pluginsWindow.cs
│ │ ├── cardReaderWindow.designer.cs
│ │ ├── preferencesWindow.cs
│ │ ├── pocketStationInfo.cs
│ │ ├── commentsWindow.Designer.cs
│ │ ├── commentsWindow.resx
│ │ ├── headerWindow.resx
│ │ ├── pocketStationInfo.resx
│ │ ├── preferencesWindow.resx
│ │ ├── aboutWindow.resx
│ │ ├── cardReaderWindow.resx
│ │ ├── compareWindow.resx
│ │ ├── pluginsWindow.resx
│ │ ├── informationWindow.resx
│ │ ├── pluginsWindow.Designer.cs
│ │ └── compareWindow.Designer.cs
├── app.manifest
└── MemcardRex.csproj
├── MemcardRex.Core
├── MemcardRex.Core.csproj
├── Support
│ ├── xmlSettingsEditor.cs
│ ├── ProgramSettings.cs
│ └── BmpBuilder.cs
└── Hardware
│ └── HardwareInterface.cs
├── .vscode
├── tasks.json
└── launch.json
├── .gitattributes
├── MONO.md
├── MemcardRex.sln
├── README.md
└── .gitignore
/.vs/slnx.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/.vs/slnx.sqlite
--------------------------------------------------------------------------------
/.vs/MemcardRex/v14/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/.vs/MemcardRex/v14/.suo
--------------------------------------------------------------------------------
/.vs/MemcardRex/v16/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/.vs/MemcardRex/v16/.suo
--------------------------------------------------------------------------------
/.vs/VSWorkspaceState.json:
--------------------------------------------------------------------------------
1 | {
2 | "ExpandedNodes": [
3 | ""
4 | ],
5 | "PreviewInSolutionExplorer": false
6 | }
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/.DS_Store
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/Thumbs.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/Thumbs.db
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/amflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/amflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/euflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/euflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/jpflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/jpflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/linked.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/linked.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/naflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/naflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/plugin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/plugin.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/amflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/amflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/euflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/euflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/jpflag.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/jpflag.bmp
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/comments.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/comments.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/copycard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/copycard.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/dxdread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/dxdread.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/dxdwrite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/dxdwrite.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/iconedit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/iconedit.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/infoicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/infoicon.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/newcard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/newcard.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/opencard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/opencard.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/options.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/options.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/quiticon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/quiticon.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/readicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/readicon.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/savecard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/savecard.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/tmpbuffer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/tmpbuffer.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/closecard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/closecard.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/comparetemp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/comparetemp.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/deletesave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/deletesave.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/exportsave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/exportsave.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/formatsave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/formatsave.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/headeredit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/headeredit.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/importsave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/importsave.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/memcardrex.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/memcardrex.ico
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/pastecard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/pastecard.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/savecardas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/savecardas.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Resources/info_template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Resources/info_template.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/closeallcards.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/closeallcards.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/undeletesave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/undeletesave.png
--------------------------------------------------------------------------------
/MemcardRex.Windows/Resources/linked disabled.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.Windows/Resources/linked disabled.bmp
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_16x16.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_32x32.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_128x128.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_256x256.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_512x512.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShendoXT/memcardrex/HEAD/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png
--------------------------------------------------------------------------------
/MemcardRex.macOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/MacMain.cs:
--------------------------------------------------------------------------------
1 | using AppKit;
2 |
3 | namespace MemcardRex
4 | {
5 | static class MainClass
6 | {
7 | static void Main (string [] args)
8 | {
9 | NSApplication.Init ();
10 | NSApplication.Main (args);
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/MemcardRex.macOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net7.0-macos
6 | memcardrex
7 | enable
8 | enable
9 | 13.0
10 |
11 |
12 |
13 |
14 | {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
15 | MemcardRex.Core
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/MemcardRex.Core/MemcardRex.Core.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | netstandard2.0
4 | Library
5 | false
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleName
6 | MemcardRex
7 | CFBundleIdentifier
8 | com.shendoxt.MemcardRex
9 | CFBundleShortVersionString
10 | 2.0
11 | CFBundleVersion
12 | 1
13 | LSMinimumSystemVersion
14 | 13.0
15 | CFBundleDevelopmentRegion
16 | en
17 | CFBundleInfoDictionaryVersion
18 | 6.0
19 | CFBundlePackageType
20 | APPL
21 | CFBundleSignature
22 | ????
23 | NSHumanReadableCopyright
24 | ${AuthorCopyright:HtmlEncode}
25 | NSPrincipalClass
26 | NSApplication
27 | NSMainStoryboardFile
28 | Main
29 | XSAppIconAssets
30 | Assets.xcassets/AppIcon.appiconset
31 |
32 |
33 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/CommentDialogController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("CommentDialogController")]
13 | partial class CommentDialogController
14 | {
15 | [Outlet]
16 | AppKit.NSTextFieldCell CommentTextField { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSTextField CommentTextInput { get; set; }
20 |
21 | [Action ("CancelDialog:")]
22 | partial void CancelDialog (Foundation.NSObject sender);
23 |
24 | [Action ("ConfirmDialog:")]
25 | partial void ConfirmDialog (Foundation.NSObject sender);
26 |
27 | void ReleaseDesignerOutlets ()
28 | {
29 | if (CommentTextInput != null) {
30 | CommentTextInput.Dispose ();
31 | CommentTextInput = null;
32 | }
33 |
34 | if (CommentTextField != null) {
35 | CommentTextField.Dispose ();
36 | CommentTextField = null;
37 | }
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace MemcardRex.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/HardwareDialogController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex.macOS
11 | {
12 | [Register ("HardwareDialogController")]
13 | partial class HardwareDialogController
14 | {
15 | [Outlet]
16 | AppKit.NSButton abortButton { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSTextField deviceLabel { get; set; }
20 |
21 | [Outlet]
22 | AppKit.NSProgressIndicator progressBar { get; set; }
23 |
24 | [Action ("abortDialog:")]
25 | partial void abortDialog (Foundation.NSObject sender);
26 |
27 | void ReleaseDesignerOutlets ()
28 | {
29 | if (deviceLabel != null) {
30 | deviceLabel.Dispose ();
31 | deviceLabel = null;
32 | }
33 |
34 | if (progressBar != null) {
35 | progressBar.Dispose ();
36 | progressBar = null;
37 | }
38 |
39 | if (abortButton != null) {
40 | abortButton.Dispose ();
41 | abortButton = null;
42 | }
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "armbuild",
6 | "command": "dotnet",
7 | "type": "process",
8 | "args": [
9 | "build",
10 | "-c",
11 | "debug",
12 | "-r",
13 | "osx-arm64",
14 | "MemcardRex.macOS"
15 | ],
16 | "problemMatcher": "$msCompile"
17 | },
18 | {
19 | "label": "x64build",
20 | "command": "dotnet",
21 | "type": "process",
22 | "args": [
23 | "build",
24 | "-c",
25 | "debug",
26 | "-r",
27 | "osx-x64",
28 | "MemcardRex.macOS"
29 | ],
30 | "problemMatcher": "$msCompile"
31 | },
32 | {
33 | "label": "publish",
34 | "command": "dotnet",
35 | "type": "process",
36 | "args": [
37 | "build",
38 | "-c",
39 | "release",
40 | "MemcardRex.macOS"
41 | ],
42 | "problemMatcher": "$msCompile"
43 | }
44 | ]
45 | }
--------------------------------------------------------------------------------
/MemcardRex.Windows/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Program.cs:
--------------------------------------------------------------------------------
1 | /*
2 | This program is free software: you can redistribute it and/or modify
3 | it under the terms of the GNU General Public License as published by
4 | the Free Software Foundation, either version 3 of the License, or
5 | (at your option) any later version.
6 |
7 | This program is distributed in the hope that it will be useful,
8 | but WITHOUT ANY WARRANTY; without even the implied warranty of
9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 | GNU General Public License for more details.
11 |
12 | You should have received a copy of the GNU General Public License
13 | along with this program. If not, see .
14 | */
15 |
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Windows.Forms;
19 | using System.Runtime.Versioning;
20 |
21 | namespace MemcardRex
22 | {
23 | [SupportedOSPlatform("windows")]
24 | static class Program
25 | {
26 | ///
27 | /// The main entry point for the application.
28 | ///
29 | [STAThread]
30 | static void Main()
31 | {
32 | Application.EnableVisualStyles();
33 | Application.SetCompatibleTextRenderingDefault(false);
34 | Application.Run(new mainWindow());
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/commentsWindow.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.Versioning;
3 | using System.Windows.Forms;
4 |
5 | namespace MemcardRex
6 | {
7 | [SupportedOSPlatform("windows")]
8 | public partial class commentsWindow : Form
9 | {
10 | //If OK is pressed this will be true
11 | public bool okPressed = false;
12 | public string saveComment = null;
13 |
14 | public commentsWindow()
15 | {
16 | InitializeComponent();
17 | }
18 |
19 | //Load initial values
20 | public void initializeDialog(string dialogTitle, string saveComment)
21 | {
22 | //Set window title to save name
23 | this.Text = dialogTitle;
24 | commentsTextBox.Text = saveComment;
25 |
26 | //A fix for selected all behaviour
27 | commentsTextBox.Select(commentsTextBox.Text.Length, 0);
28 | }
29 |
30 | private void cancelButton_Click(object sender, EventArgs e)
31 | {
32 | this.Close();
33 | }
34 |
35 | private void okButton_Click(object sender, EventArgs e)
36 | {
37 | //Return value given by the dialog
38 | saveComment = commentsTextBox.Text;
39 |
40 | okPressed = true;
41 | this.Close();
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "icon_16x16.png",
5 | "idiom" : "mac",
6 | "scale" : "1x",
7 | "size" : "16x16"
8 | },
9 | {
10 | "filename" : "icon_16x16@2x.png",
11 | "idiom" : "mac",
12 | "scale" : "2x",
13 | "size" : "16x16"
14 | },
15 | {
16 | "filename" : "icon_32x32.png",
17 | "idiom" : "mac",
18 | "scale" : "1x",
19 | "size" : "32x32"
20 | },
21 | {
22 | "filename" : "icon_32x32@2x.png",
23 | "idiom" : "mac",
24 | "scale" : "2x",
25 | "size" : "32x32"
26 | },
27 | {
28 | "filename" : "icon_128x128.png",
29 | "idiom" : "mac",
30 | "scale" : "1x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "filename" : "icon_128x128@2x.png",
35 | "idiom" : "mac",
36 | "scale" : "2x",
37 | "size" : "128x128"
38 | },
39 | {
40 | "filename" : "icon_256x256.png",
41 | "idiom" : "mac",
42 | "scale" : "1x",
43 | "size" : "256x256"
44 | },
45 | {
46 | "filename" : "icon_256x256@2x.png",
47 | "idiom" : "mac",
48 | "scale" : "2x",
49 | "size" : "256x256"
50 | },
51 | {
52 | "filename" : "icon_512x512.png",
53 | "idiom" : "mac",
54 | "scale" : "1x",
55 | "size" : "512x512"
56 | },
57 | {
58 | "filename" : "icon_512x512@2x.png",
59 | "idiom" : "mac",
60 | "scale" : "2x",
61 | "size" : "512x512"
62 | }
63 | ],
64 | "info" : {
65 | "author" : "xcode",
66 | "version" : 1
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/HeaderDialogController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("HeaderDialogController")]
13 | partial class HeaderDialogController
14 | {
15 | [Outlet]
16 | AppKit.NSButton CancelButton { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSTextField IdentifierInput { get; set; }
20 |
21 | [Outlet]
22 | AppKit.NSButton OkButton { get; set; }
23 |
24 | [Outlet]
25 | AppKit.NSTextField ProductCodeInput { get; set; }
26 |
27 | [Outlet]
28 | AppKit.NSComboBox RegionCombo { get; set; }
29 |
30 | [Action ("CancelDialog:")]
31 | partial void CancelDialog (Foundation.NSObject sender);
32 |
33 | [Action ("ConfirmDialog:")]
34 | partial void ConfirmDialog (Foundation.NSObject sender);
35 |
36 | void ReleaseDesignerOutlets ()
37 | {
38 | if (CancelButton != null) {
39 | CancelButton.Dispose ();
40 | CancelButton = null;
41 | }
42 |
43 | if (IdentifierInput != null) {
44 | IdentifierInput.Dispose ();
45 | IdentifierInput = null;
46 | }
47 |
48 | if (OkButton != null) {
49 | OkButton.Dispose ();
50 | OkButton = null;
51 | }
52 |
53 | if (ProductCodeInput != null) {
54 | ProductCodeInput.Dispose ();
55 | ProductCodeInput = null;
56 | }
57 |
58 | if (RegionCombo != null) {
59 | RegionCombo.Dispose ();
60 | RegionCombo = null;
61 | }
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "MemcardRex.macOS.debug.x64",
9 | "type": "coreclr",
10 | "request": "launch",
11 | "preLaunchTask": "x64build",
12 | "program": "${workspaceFolder}/MemcardRex.macOS/bin/Debug/net7.0-macos/osx-x64/memcardrex.app/Contents/MacOS/memcardrex",
13 | "args": [],
14 | "cwd": "${workspaceFolder}",
15 | "stopAtEntry": false,
16 | "console": "internalConsole"
17 | },
18 | {
19 | "name": "MemcardRex.macOS.debug.arm64",
20 | "type": "coreclr",
21 | "request": "launch",
22 | "preLaunchTask": "armbuild",
23 | "program": "${workspaceFolder}/MemcardRex.macOS/bin/Debug/net7.0-macos/osx-arm64/MemcardRex.app/Contents/MacOS/MemcardRex",
24 | "args": [],
25 | "cwd": "${workspaceFolder}",
26 | "stopAtEntry": false,
27 | "console": "internalConsole"
28 | },
29 | {
30 | "name": "MemcardRex.macOS.publish",
31 | "type": "coreclr",
32 | "request": "launch",
33 | "preLaunchTask": "publish",
34 | "program": "${workspaceFolder}/MemcardRex.macOS/bin/Release/net7.0-macos/MemcardRex.app/Contents/MacOS/MemcardRex",
35 | "args": [],
36 | "cwd": "${workspaceFolder}",
37 | "stopAtEntry": false,
38 | "console": "internalConsole"
39 | }
40 | ],
41 | }
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/WindowController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("WindowController")]
13 | partial class WindowController
14 | {
15 | [Outlet]
16 | AppKit.NSView AccessoryViewGoBar { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSToolbarItem tmpBufferToolbar { get; set; }
20 |
21 | [Action ("editCommentToolbar:")]
22 | partial void editCommentToolbar (Foundation.NSObject sender);
23 |
24 | [Action ("editHeaderToolbar:")]
25 | partial void editHeaderToolbar (Foundation.NSObject sender);
26 |
27 | [Action ("editIconToolbar:")]
28 | partial void editIconToolbar (Foundation.NSObject sender);
29 |
30 | [Action ("exportSaveToolbar:")]
31 | partial void exportSaveToolbar (Foundation.NSObject sender);
32 |
33 | [Action ("importSaveToolbar:")]
34 | partial void importSaveToolbar (Foundation.NSObject sender);
35 |
36 | [Action ("openDocToolbar:")]
37 | partial void openDocToolbar (Foundation.NSObject sender);
38 |
39 | [Action ("saveDocToolbar:")]
40 | partial void saveDocToolbar (Foundation.NSObject sender);
41 |
42 | [Action ("tmpBufferToolbarAction:")]
43 | partial void tmpBufferToolbarAction (Foundation.NSObject sender);
44 |
45 | void ReleaseDesignerOutlets ()
46 | {
47 | if (AccessoryViewGoBar != null) {
48 | AccessoryViewGoBar.Dispose ();
49 | AccessoryViewGoBar = null;
50 | }
51 |
52 | if (tmpBufferToolbar != null) {
53 | tmpBufferToolbar.Dispose ();
54 | tmpBufferToolbar = null;
55 | }
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/InfoDialogController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("InfoDialogController")]
13 | partial class InfoDialogController
14 | {
15 | [Outlet]
16 | AppKit.NSTextField iconFramesLabel { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSImageView iconImage { get; set; }
20 |
21 | [Outlet]
22 | AppKit.NSTextField identifierLabel { get; set; }
23 |
24 | [Outlet]
25 | AppKit.NSTextField productCodeLabel { get; set; }
26 |
27 | [Outlet]
28 | AppKit.NSTextField regionLabel { get; set; }
29 |
30 | [Outlet]
31 | AppKit.NSTextField sizeLabel { get; set; }
32 |
33 | [Outlet]
34 | AppKit.NSTextField slotLabel { get; set; }
35 |
36 | [Outlet]
37 | AppKit.NSTextField titleLabel { get; set; }
38 |
39 | [Action ("CloseDialog:")]
40 | partial void CloseDialog (Foundation.NSObject sender);
41 |
42 | void ReleaseDesignerOutlets ()
43 | {
44 | if (titleLabel != null) {
45 | titleLabel.Dispose ();
46 | titleLabel = null;
47 | }
48 |
49 | if (productCodeLabel != null) {
50 | productCodeLabel.Dispose ();
51 | productCodeLabel = null;
52 | }
53 |
54 | if (identifierLabel != null) {
55 | identifierLabel.Dispose ();
56 | identifierLabel = null;
57 | }
58 |
59 | if (regionLabel != null) {
60 | regionLabel.Dispose ();
61 | regionLabel = null;
62 | }
63 |
64 | if (slotLabel != null) {
65 | slotLabel.Dispose ();
66 | slotLabel = null;
67 | }
68 |
69 | if (sizeLabel != null) {
70 | sizeLabel.Dispose ();
71 | sizeLabel = null;
72 | }
73 |
74 | if (iconFramesLabel != null) {
75 | iconFramesLabel.Dispose ();
76 | iconFramesLabel = null;
77 | }
78 |
79 | if (iconImage != null) {
80 | iconImage.Dispose ();
81 | iconImage = null;
82 | }
83 | }
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/aboutWindow.cs:
--------------------------------------------------------------------------------
1 | //Generic about window
2 | //Shendo 2009-2024
3 |
4 | using System;
5 | using System.Runtime.Versioning;
6 | using System.Windows.Forms;
7 |
8 | namespace MemcardRex
9 | {
10 | [SupportedOSPlatform("windows")]
11 | public partial class AboutWindow : Form
12 | {
13 | public AboutWindow()
14 | {
15 | InitializeComponent();
16 | }
17 |
18 | ///
19 | /// Shows the application about dialog
20 | ///
21 | /// Handle of the window which hosts this dialog
22 | /// Name of the host application
23 | /// Version of the host application
24 | /// Date of the compilation
25 | /// The copyright info shown in the bottom area of the dialog
26 | /// Used for additional information such as credits
27 | public void initDialog(mainWindow owner, string applicationName, string applicationVersion, string compileDate, string copyrightInfo, string additionalInfo)
28 | {
29 | //Display program name
30 | appNameLabel.Text = applicationName;
31 |
32 | //Display program version
33 | appVersionLabel.Text = "Version: " + applicationVersion;
34 |
35 | //Display program compile date
36 | compileDateLabel.Text = "Compile date: " + compileDate;
37 |
38 | //Display copyright information
39 | copyrightLabel.Text = copyrightInfo;
40 |
41 | //Display other info
42 | infoLabel.Text = additionalInfo;
43 |
44 | //Resize dialog according to the quantity of text
45 | this.Height = (int)(owner.xScale * 132 + infoLabel.Height);
46 | compileDateLabel.Width = (int)(150 * owner.xScale);
47 |
48 | //Display a dialog
49 | this.ShowDialog(owner);
50 | }
51 |
52 | private void OKbutton_Click(object sender, EventArgs e)
53 | {
54 | //Close the form
55 | this.Close();
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/CommentDialogController.cs:
--------------------------------------------------------------------------------
1 | // This file has been autogenerated from a class added in the UI designer.
2 |
3 | using System;
4 |
5 | using Foundation;
6 | using AppKit;
7 | using System.Drawing;
8 |
9 | namespace MemcardRex
10 | {
11 | public partial class CommentDialogController : NSViewController
12 | {
13 | #region Private Variables
14 | private string _dialogTitle = "";
15 | private string _comment = "";
16 | private NSViewController _presentor;
17 | #endregion
18 |
19 | #region Computed Properties
20 | public string DialogTitle
21 | {
22 | get { return _dialogTitle; }
23 | set { _dialogTitle = value; }
24 | }
25 |
26 | public string Comment
27 | {
28 | get { return _comment; }
29 | set { _comment = value; }
30 | }
31 |
32 | public NSViewController Presentor
33 | {
34 | get { return _presentor; }
35 | set { _presentor = value; }
36 | }
37 | #endregion
38 |
39 | public CommentDialogController (IntPtr handle) : base (handle)
40 | {
41 | }
42 |
43 | #region Override Methods
44 | public override void ViewWillAppear()
45 | {
46 | base.ViewWillAppear();
47 |
48 | this.View.Window.Title = DialogTitle;
49 |
50 | CommentTextInput.StringValue = Comment;
51 |
52 | //Disable resizing of modal dialog
53 | this.View.Window.StyleMask &= ~NSWindowStyle.Resizable;
54 | }
55 | #endregion
56 |
57 | #region Events
58 | public EventHandler DialogAccepted;
59 |
60 | internal void RaiseDialogAccepted()
61 | {
62 | if (this.DialogAccepted != null)
63 | this.DialogAccepted(this, EventArgs.Empty);
64 | }
65 | #endregion
66 |
67 | [Export("ConfirmDialog:")]
68 | void AcceptDialog(NSObject sender)
69 | {
70 | //Save changes
71 | Comment = CommentTextInput.StringValue;
72 |
73 | RaiseDialogAccepted();
74 | Presentor.DismissViewController(this);
75 | }
76 |
77 | [Export("CancelDialog:")]
78 | void CancelDialoga(NSObject sender)
79 | {
80 | Presentor.DismissViewController(this);
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/headerWindow.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.Versioning;
3 | using System.Windows.Forms;
4 |
5 | namespace MemcardRex
6 | {
7 | [SupportedOSPlatform("windows")]
8 | public partial class headerWindow : Form
9 | {
10 | //If OK is pressed this value will be true
11 | public bool okPressed = false;
12 |
13 | //Name of the host application
14 | string appName = null;
15 |
16 | //Save header data
17 | public string prodCode = null;
18 | public string saveIdentifier = null;
19 | public string saveRegion = null;
20 |
21 | public headerWindow()
22 | {
23 | InitializeComponent();
24 | }
25 |
26 | private void headerWindow_Load(object sender, EventArgs e)
27 | {
28 |
29 | }
30 |
31 | //Initialize dialog by loading provided values
32 | public void initializeDialog(string applicationName, string dialogTitle, string prodCode, string identifier, string region)
33 | {
34 | appName = applicationName;
35 | this.Text = dialogTitle;
36 | prodCodeTextbox.Text = prodCode;
37 | identifierTextbox.Text = identifier;
38 | regionCombobox.Text = region;
39 |
40 | //A fix for selected all behaviour
41 | prodCodeTextbox.Select(prodCodeTextbox.Text.Length, 0);
42 | identifierTextbox.Select(identifierTextbox.Text.Length, 0);
43 | }
44 |
45 | private void cancelButton_Click(object sender, EventArgs e)
46 | {
47 | this.Close();
48 | }
49 |
50 | private void okButton_Click(object sender, EventArgs e)
51 | {
52 | //Check if values are valid to be submitted
53 | if (prodCodeTextbox.Text.Length < 10 && identifierTextbox.Text.Length != 0)
54 | {
55 | //String is not valid
56 | MessageBox.Show("Product code must be exactly 10 characters long.", appName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
57 | }
58 | else
59 | {
60 | //String is valid
61 | prodCode = prodCodeTextbox.Text;
62 | saveIdentifier = identifierTextbox.Text;
63 | saveRegion = regionCombobox.Text;
64 |
65 | //OK is pressed
66 | okPressed = true;
67 | this.Close();
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/compareWindow.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.Versioning;
3 | using System.Windows.Forms;
4 |
5 | namespace MemcardRex
6 | {
7 | [SupportedOSPlatform("windows")]
8 | public partial class compareWindow : Form
9 | {
10 |
11 | public compareWindow()
12 | {
13 | InitializeComponent();
14 | }
15 |
16 | //Show compare dialog
17 | public void initializeDialog(mainWindow hostWindow, string appName, byte[] save1Data, string save1Title, byte[] save2Data, string save2Title)
18 | {
19 | //Set window title
20 | this.Text = "Compare saves";
21 |
22 | compareListView.Columns[0].Width = (int)(compareListView.Columns[0].Width * hostWindow.xScale);
23 | compareListView.Columns[1].Width = (int)(compareListView.Columns[1].Width * hostWindow.xScale);
24 | compareListView.Columns[2].Width = (int)(compareListView.Columns[2].Width * hostWindow.xScale);
25 |
26 | //Set save titles
27 | save1Label.Text = "Save 1: " + save1Title;
28 | save2Label.Text = "Save 2: " + save2Title;
29 |
30 | //Compare saves
31 | for (int i = 0; i < save1Data.Length; i++)
32 | {
33 | //Check if the bytes are different
34 | if (save1Data[i] != save2Data[i])
35 | {
36 | compareListView.Items.Add("0x" + i.ToString("X4") + " (" + i.ToString() + ")");
37 | compareListView.Items[compareListView.Items.Count - 1].SubItems.Add("0x" + save1Data[i].ToString("X2") + " (" + save1Data[i].ToString() + ")");
38 | compareListView.Items[compareListView.Items.Count - 1].SubItems.Add("0x" + save2Data[i].ToString("X2") + " (" + save2Data[i].ToString() + ")");
39 | }
40 | }
41 |
42 | //Check if the list contains any items
43 | if (compareListView.Items.Count < 1)
44 | {
45 | MessageBox.Show("Compared saves are identical.", appName, MessageBoxButtons.OK, MessageBoxIcon.Information);
46 | return;
47 | }
48 |
49 |
50 | this.ShowDialog(hostWindow);
51 |
52 | }
53 |
54 | private void compareWindow_Load(object sender, EventArgs e)
55 | {
56 |
57 | }
58 |
59 | private void okButton_Click(object sender, EventArgs e)
60 | {
61 | this.Close();
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/PreferencesViewController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("PreferencesViewController")]
13 | partial class PreferencesViewController
14 | {
15 | [Outlet]
16 | AppKit.NSTextField addressInput { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSButton backupCheckbox { get; set; }
20 |
21 | [Outlet]
22 | AppKit.NSPopUpButton cardPopup { get; set; }
23 |
24 | [Outlet]
25 | AppKit.NSButton fixCheckbox { get; set; }
26 |
27 | [Outlet]
28 | AppKit.NSPopUpButton formatPopup { get; set; }
29 |
30 | [Outlet]
31 | AppKit.NSPopUpButton iconPopup { get; set; }
32 |
33 | [Outlet]
34 | AppKit.NSTextField portInput { get; set; }
35 |
36 | [Outlet]
37 | AppKit.NSPopUpButton portPopup { get; set; }
38 |
39 | [Outlet]
40 | AppKit.NSButton restoreCheckbox { get; set; }
41 |
42 | [Outlet]
43 | AppKit.NSPopUpButton speedPopup { get; set; }
44 |
45 | [Action ("cancelDialog:")]
46 | partial void cancelDialog (Foundation.NSObject sender);
47 |
48 | [Action ("confirmDialog:")]
49 | partial void confirmDialog (Foundation.NSObject sender);
50 |
51 | void ReleaseDesignerOutlets ()
52 | {
53 | if (portPopup != null) {
54 | portPopup.Dispose ();
55 | portPopup = null;
56 | }
57 |
58 | if (speedPopup != null) {
59 | speedPopup.Dispose ();
60 | speedPopup = null;
61 | }
62 |
63 | if (addressInput != null) {
64 | addressInput.Dispose ();
65 | addressInput = null;
66 | }
67 |
68 | if (portInput != null) {
69 | portInput.Dispose ();
70 | portInput = null;
71 | }
72 |
73 | if (formatPopup != null) {
74 | formatPopup.Dispose ();
75 | formatPopup = null;
76 | }
77 |
78 | if (cardPopup != null) {
79 | cardPopup.Dispose ();
80 | cardPopup = null;
81 | }
82 |
83 | if (iconPopup != null) {
84 | iconPopup.Dispose ();
85 | iconPopup = null;
86 | }
87 |
88 | if (backupCheckbox != null) {
89 | backupCheckbox.Dispose ();
90 | backupCheckbox = null;
91 | }
92 |
93 | if (restoreCheckbox != null) {
94 | restoreCheckbox.Dispose ();
95 | restoreCheckbox = null;
96 | }
97 |
98 | if (fixCheckbox != null) {
99 | fixCheckbox.Dispose ();
100 | fixCheckbox = null;
101 | }
102 | }
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/WindowController.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Foundation;
3 | using AppKit;
4 |
5 | namespace MemcardRex
6 | {
7 | public partial class WindowController : NSWindowController
8 | {
9 | #region Application Access
10 | ///
11 | /// A helper shortcut to the app delegate.
12 | ///
13 | /// The app.
14 | public static AppDelegate App
15 | {
16 | get { return (AppDelegate)NSApplication.SharedApplication.Delegate; }
17 | }
18 | #endregion
19 |
20 | #region Constructor
21 | public WindowController(IntPtr handle) : base(handle)
22 | {
23 |
24 | }
25 | #endregion
26 |
27 | #region Override Methods
28 | public override void WindowDidLoad()
29 | {
30 | base.WindowDidLoad();
31 |
32 | Window.TabbingIdentifier = "Main";
33 |
34 | //Disable Temp buffer toolbar button if temp buffer is empty
35 | if(App.TempBuffer == null) tmpBufferToolbar.Enabled = false;
36 | }
37 |
38 | public void SetPasteFromBufferToolbar(NSImage icon, bool itemState)
39 | {
40 | if (icon != null) tmpBufferToolbar.Image = icon;
41 | tmpBufferToolbar.Enabled = itemState;
42 | }
43 |
44 | public override void GetNewWindowForTab(NSObject sender)
45 | {
46 | // Ask app to open a new document window
47 | App.NewDocument(this);
48 | }
49 |
50 | [Export("tmpBufferToolbarAction:")]
51 | void TmpBufferToolbarAction(NSObject sender)
52 | {
53 | var window = NSApplication.SharedApplication.KeyWindow.ContentViewController as ViewController;
54 | window.PasteFromTempBuffer(sender);
55 | }
56 |
57 | [Export("editHeaderToolbar:")]
58 | void EditHeaderToolbar(NSObject sender)
59 | {
60 | var window = NSApplication.SharedApplication.KeyWindow.ContentViewController as ViewController;
61 | window.EditHeader(sender);
62 | }
63 |
64 | [Export("editCommentToolbar:")]
65 | void EditCommentToolbar(NSObject sender)
66 | {
67 | var window = NSApplication.SharedApplication.KeyWindow.ContentViewController as ViewController;
68 | window.EditSaveComment(sender);
69 | }
70 |
71 | [Export("openDocToolbar:")]
72 | void OpenDocToolbar(NSObject sender)
73 | {
74 | App.OpenDialog(sender);
75 | }
76 |
77 | [Export("saveDocToolbar:")]
78 | void SaveDocToolbar(NSObject sender)
79 | {
80 | var window = NSApplication.SharedApplication.KeyWindow.ContentViewController as ViewController;
81 | window.SaveDialog(sender);
82 | }
83 |
84 | #endregion
85 | }
86 | }
87 |
88 |
--------------------------------------------------------------------------------
/MONO.md:
--------------------------------------------------------------------------------
1 | # How to build and/or run MemcardRex on Linux
2 |
3 | The project is working well with Mono.
4 |
5 | If you just want to run MemcardRex, follow Step 1 of [Install Build tools and Dependencies](#install-build-tools-and-dependencies) below, and then download MemcardRex from [releases](https://github.com/ShendoXT/memcardrex/releases). Then, follow [Run MemcardRex](#run-memcardrex) and you're running!
6 | > Note: This last step has to be done every time you want to run MemcardRex. If you want to make this easier, make a `.sh` or `.desktop` file.
7 |
8 | ### Clone the project
9 | In a directory of your choice, download MemcardRex:
10 |
11 | ``git clone https://github.com/ShendoXT/memcardrex.git``
12 |
13 | ### Install Build tools and Dependencies
14 |
15 | 1. Install mono from either the [official site](http://www.mono-project.com/download/), or your distribution's package manager. The package included on some Linux distributions may not work properly.
16 | 2. Install nuget from your package manager. If you installed Mono following the website instructions, your package manager will now install the official version of nuget.
17 | 3. Update nuget: ``sudo nuget update -self``
18 | 4. Edit nuget's configuration file in `~/.config/NuGet/NuGet.Config`
19 |
20 | Either use the configuration below, or make your own with [Microsoft's documentation](https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior).
21 | ```
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | ```
45 |
46 | 5. `cd` to wherever you downloaded MemcardRex to.
47 | 6. Run `nuget restore -NoCache` to download project dependencies.
48 |
49 | ### Build MemcardRex
50 |
51 | In the folder where the git project is located, run `msbuild` in your terminal.
52 | If that didn't work (probably because your distro's version of mono is misconfigured) try: ``xbuild /property:TargetFrameworkVersion=v4.0``
53 |
54 | If the build is successful, the executable will be in `memcardrex/MemcardRex/bin/Debug/`
55 |
56 | ### Run MemcardRex
57 |
58 | Navigate to where the executable is located (see last step) in terminal and run `mono MemcardRex.exe`
59 |
60 | If you are trying to use a DexDrive connected by serial port or USB serial, you may have to run mono as root: `sudo mono MemcardRex.exe`
61 | > If you don't want to run MemcardRex with `sudo`, try adding your user to the `dialout` user group with `sudo usermod -a -G dialout $USER` as detailed in this StackExchange post: [Unix StackExchange](https://unix.stackexchange.com/questions/14354/read-write-to-a-serial-port-without-root)
62 |
63 |
--------------------------------------------------------------------------------
/MemcardRex.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio Version 17
3 | VisualStudioVersion = 17.11.35222.181
4 | MinimumVisualStudioVersion = 10.0.40219.1
5 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemcardRex", "MemcardRex.Windows\MemcardRex.csproj", "{39B94E8A-7BD1-4072-8A60-D90464326B18}"
6 | EndProject
7 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemcardRex.Core", "MemcardRex.Core\MemcardRex.Core.csproj", "{5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}"
8 | EndProject
9 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemcardRex.macOS", "MemcardRex.macOS\MemcardRex.macOS.csproj", "{6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}"
10 | EndProject
11 | Global
12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
13 | Debug|Any CPU = Debug|Any CPU
14 | Debug|x64 = Debug|x64
15 | Release|Any CPU = Release|Any CPU
16 | Release|x64 = Release|x64
17 | EndGlobalSection
18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
19 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
20 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Debug|Any CPU.Build.0 = Debug|Any CPU
21 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Debug|x64.ActiveCfg = Debug|x64
22 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Debug|x64.Build.0 = Debug|x64
23 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Release|Any CPU.ActiveCfg = Release|Any CPU
24 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Release|Any CPU.Build.0 = Release|Any CPU
25 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Release|x64.ActiveCfg = Release|x64
26 | {39B94E8A-7BD1-4072-8A60-D90464326B18}.Release|x64.Build.0 = Release|x64
27 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
28 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
29 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Debug|x64.ActiveCfg = Debug|Any CPU
30 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Debug|x64.Build.0 = Debug|Any CPU
31 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
32 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Release|Any CPU.Build.0 = Release|Any CPU
33 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Release|x64.ActiveCfg = Release|Any CPU
34 | {5567EB5B-5E1F-4C7E-B174-214C57BFAEAD}.Release|x64.Build.0 = Release|Any CPU
35 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
36 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Debug|Any CPU.Build.0 = Debug|Any CPU
37 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Debug|x64.ActiveCfg = Debug|Any CPU
38 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Debug|x64.Build.0 = Debug|Any CPU
39 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Release|Any CPU.ActiveCfg = Release|Any CPU
40 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Release|Any CPU.Build.0 = Release|Any CPU
41 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Release|x64.ActiveCfg = Release|Any CPU
42 | {6EE5516B-12A6-4B9D-9750-BACCE0AAB60F}.Release|x64.Build.0 = Release|Any CPU
43 | EndGlobalSection
44 | GlobalSection(SolutionProperties) = preSolution
45 | HideSolutionNode = FALSE
46 | EndGlobalSection
47 | GlobalSection(ExtensibilityGlobals) = postSolution
48 | SolutionGuid = {EAAD5AA5-E759-4F8A-B6CF-F6687EB273B2}
49 | EndGlobalSection
50 | EndGlobal
51 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/HeaderDialogController.cs:
--------------------------------------------------------------------------------
1 | // This file has been autogenerated from a class added in the UI designer.
2 |
3 | using System;
4 |
5 | using Foundation;
6 | using AppKit;
7 |
8 | namespace MemcardRex
9 | {
10 | public partial class HeaderDialogController : NSViewController
11 | {
12 | #region Private Variables
13 | private string _dialogTitle = "";
14 | private string _productCode = "";
15 | private string _identifier = "";
16 | private string _region = "";
17 | private NSViewController _presentor;
18 | #endregion
19 |
20 | #region Computed Properties
21 | public string DialogTitle
22 | {
23 | get { return _dialogTitle; }
24 | set { _dialogTitle = value; }
25 | }
26 |
27 | public string ProductCode
28 | {
29 | get { return _productCode; }
30 | set { _productCode = value; }
31 | }
32 |
33 | public string IdentifierString
34 | {
35 | get { return _identifier; }
36 | set { _identifier = value; }
37 | }
38 |
39 | public string Region
40 | {
41 | get { return _region; }
42 | set { _region = value; }
43 | }
44 |
45 | public NSViewController Presentor
46 | {
47 | get { return _presentor; }
48 | set { _presentor = value; }
49 | }
50 | #endregion
51 |
52 | public HeaderDialogController (IntPtr handle) : base (handle)
53 | {
54 | }
55 |
56 | #region Override Methods
57 | public override void ViewWillAppear()
58 | {
59 | base.ViewWillAppear();
60 |
61 | this.View.Window.Title = DialogTitle;
62 |
63 | IdentifierInput.StringValue = IdentifierString;
64 | ProductCodeInput.StringValue = ProductCode;
65 | RegionCombo.StringValue = Region;
66 |
67 | //Disable resizing of modal dialog
68 | this.View.Window.StyleMask &= ~NSWindowStyle.Resizable;
69 | }
70 | #endregion
71 |
72 | #region Events
73 | public EventHandler DialogAccepted;
74 |
75 | internal void RaiseDialogAccepted()
76 | {
77 | if (this.DialogAccepted != null)
78 | this.DialogAccepted(this, EventArgs.Empty);
79 | }
80 |
81 | public EventHandler DialogCanceled;
82 |
83 | internal void RaiseDialogCanceled()
84 | {
85 | if (this.DialogCanceled != null)
86 | this.DialogCanceled(this, EventArgs.Empty);
87 | }
88 | #endregion
89 |
90 | [Export("CancelDialog:")]
91 | void CancelDialoga(NSObject sender)
92 | {
93 | RaiseDialogCanceled();
94 | Presentor.DismissViewController(this);
95 | }
96 |
97 | [Export("ConfirmDialog:")]
98 | void AcceptDialog(NSObject sender)
99 | {
100 | //Save changes
101 | IdentifierString = IdentifierInput.StringValue;
102 | ProductCode = ProductCodeInput.StringValue;
103 | Region = RegionCombo.StringValue;
104 |
105 | RaiseDialogAccepted();
106 | Presentor.DismissViewController(this);
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/pluginsWindow.cs:
--------------------------------------------------------------------------------
1 | //Plugin information dialog
2 | //Shendo 2010 - 2024
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Runtime.Versioning;
7 | using System.Windows.Forms;
8 |
9 | namespace MemcardRex
10 | {
11 | [SupportedOSPlatform("windows")]
12 | public partial class pluginsWindow : Form
13 | {
14 | //Form that hosted this dialog
15 | mainWindow hostFrm = null;
16 |
17 | //Descriptive data for each loaded plugin
18 | List loadedMetadata = new List();
19 |
20 | //Currently selected plugin
21 | int pluginIndex = 0;
22 |
23 | public pluginsWindow()
24 | {
25 | InitializeComponent();
26 | }
27 |
28 | //Load default values
29 | public void initializeDialog(mainWindow hostForm, List plgMetadata)
30 | {
31 | hostFrm = hostForm;
32 | loadedMetadata = plgMetadata;
33 | pluginListView.Columns[0].Width = (int)(pluginListView.Columns[0].Width * hostFrm.xScale);
34 | pluginListView.Columns[1].Width = (int)(pluginListView.Columns[1].Width * hostFrm.xScale);
35 | pluginListView.Columns[2].Width = (int)(pluginListView.Columns[2].Width * hostFrm.xScale);
36 |
37 | //Apply the native theme to the listview
38 | //glassSupport.SetWindowTheme(pluginListView.Handle, "Explorer", null);
39 |
40 | //Check if list contains any members
41 | if (loadedMetadata.Count > 0)
42 | {
43 | //Populate list with plugins
44 | for (int i = 0; i < loadedMetadata.Count; i++)
45 | {
46 | pluginListView.Items.Add(loadedMetadata[i].pluginName);
47 | pluginListView.Items[i].SubItems.Add(loadedMetadata[i].pluginAuthor);
48 | pluginListView.Items[i].SubItems.Add(loadedMetadata[i].pluginSupportedGames);
49 |
50 | //Select first item in the list
51 | pluginListView.Items[0].Selected = true;
52 | }
53 | }
54 | }
55 |
56 | //Close this dialog
57 | private void OKbutton_Click(object sender, EventArgs e)
58 | {
59 | this.Close();
60 | }
61 |
62 | //Show about info
63 | private void aboutButton_Click(object sender, EventArgs e)
64 | {
65 | //Check if there are any loaded plugins
66 | if (loadedMetadata.Count > 0)
67 | {
68 | //Show plugin about dialog
69 | hostFrm.pluginSystem.showAboutDialog(pluginIndex);
70 | }
71 | }
72 |
73 | private void configButton_Click(object sender, EventArgs e)
74 | {
75 | //Check if there are any loaded plugins
76 | if (loadedMetadata.Count > 0)
77 | {
78 | //Show plugin config dialog
79 | hostFrm.pluginSystem.showConfigDialog(pluginIndex);
80 | }
81 | }
82 |
83 | private void pluginListView_SelectedIndexChanged(object sender, EventArgs e)
84 | {
85 | //Check if there are any items selected
86 | if (pluginListView.SelectedIndices.Count == 0) return;
87 |
88 | //Update currenty selected plugin
89 | pluginIndex = pluginListView.SelectedIndices[0];
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
54 |
55 |
56 |
57 | true
58 | true
59 |
60 |
61 |
62 |
63 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/PreferencesViewController.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Foundation;
4 | using AppKit;
5 | using System.IO.Ports;
6 |
7 |
8 | namespace MemcardRex
9 | {
10 | public partial class PreferencesViewController : NSViewController
11 | {
12 | public static AppDelegate App
13 | {
14 | get { return (AppDelegate)NSApplication.SharedApplication.Delegate; }
15 | }
16 |
17 | public PreferencesViewController (IntPtr handle) : base (handle)
18 | {
19 | }
20 |
21 | public override void ViewWillAppear()
22 | {
23 | base.ViewWillAppear();
24 |
25 | this.View.Window.Title = "Preferences";
26 |
27 | //Disable resizing and closing of modal dialog
28 | this.View.Window.StyleMask &= ~NSWindowStyle.Resizable;
29 | this.View.Window.StyleMask &= ~NSWindowStyle.Closable;
30 |
31 | //Load all valid COM ports found on the system
32 | foreach (string port in SerialPort.GetPortNames())
33 | {
34 | if (port.Contains("/dev/tty.")) portPopup.AddItem(port);
35 | }
36 |
37 | //Read program settings
38 | iconPopup.SelectItem(iconPopup.ItemAtIndex(App.appSettings.IconBackgroundColor));
39 | formatPopup.SelectItem(formatPopup.ItemAtIndex(App.appSettings.FormatType));
40 | //speedPopup.SelectItem(speedPopup.ItemAtIndex(App.appSettings.CommunicationSpeed));
41 | cardPopup.SelectItem(cardPopup.ItemAtIndex(App.appSettings.CardSlot));
42 |
43 | addressInput.StringValue = App.appSettings.RemoteCommAddress;
44 | portInput.IntValue = App.appSettings.RemoteCommPort;
45 |
46 | backupCheckbox.IntValue = App.appSettings.BackupMemcards;
47 | restoreCheckbox.IntValue = App.appSettings.RestoreWindowPosition;
48 | fixCheckbox.IntValue = App.appSettings.FixCorruptedCards;
49 |
50 | NSMenuItem comItem = portPopup.ItemWithTitle(App.appSettings.CommunicationPort);
51 |
52 | if(portPopup.ItemCount > 0)
53 | {
54 | if (comItem != null) portPopup.SelectItem(comItem);
55 | }
56 | else
57 | {
58 | portPopup.Enabled = false;
59 | }
60 | }
61 |
62 | [Export("confirmDialog:")]
63 | void ConfirmDialog(NSObject sender)
64 | {
65 | //Save program settings
66 | App.appSettings.IconBackgroundColor = (int) iconPopup.IndexOfSelectedItem;
67 | App.appSettings.FormatType = (int) formatPopup.IndexOfSelectedItem;
68 | //App.appSettings.CommunicationSpeed = (int)speedPopup.IndexOfSelectedItem;
69 | App.appSettings.CardSlot = (int)cardPopup.IndexOfSelectedItem;
70 |
71 | if (addressInput.StringValue != "")
72 | App.appSettings.RemoteCommAddress = addressInput.StringValue;
73 | else
74 | App.appSettings.RemoteCommAddress = "192.168.1.4";
75 |
76 | App.appSettings.RemoteCommPort = portInput.IntValue;
77 |
78 | App.appSettings.BackupMemcards = backupCheckbox.IntValue;
79 | App.appSettings.RestoreWindowPosition = restoreCheckbox.IntValue;
80 | App.appSettings.FixCorruptedCards = fixCheckbox.IntValue;
81 |
82 | //Save com port if there are any
83 | if (portPopup.ItemCount > 0) App.appSettings.CommunicationPort = portPopup.TitleOfSelectedItem;
84 |
85 | this.View.Window.Close();
86 | }
87 |
88 | [Export("cancelDialog:")]
89 | void CancelDialog(NSObject sender)
90 | {
91 | this.View.Window.Close();
92 | }
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/MemcardRex.Core/Support/xmlSettingsEditor.cs:
--------------------------------------------------------------------------------
1 | //XML Writer/Reader class for MemcardRex
2 | //Shendo 2012
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 | using System.Xml;
8 |
9 | namespace MemcardRex.Core
10 | {
11 | public class xmlSettingsEditor
12 | {
13 | //Writer and reader declarations
14 | XmlTextWriter xmlWriter = null;
15 | XmlTextReader xmlReader = null;
16 |
17 | //List of all the XML elements and values
18 | List xmlElements = new List();
19 | List xmlValues = new List();
20 |
21 | //In order to read an XML file this function needs to be called
22 | public void openXmlReader(string fileName)
23 | {
24 | xmlReader = new XmlTextReader(fileName);
25 |
26 | //Read every node in the XML file
27 | while (xmlReader.Read())
28 | {
29 | switch (xmlReader.NodeType)
30 | {
31 | case XmlNodeType.Element:
32 | xmlElements.Add(xmlReader.Name);
33 | break;
34 |
35 | case XmlNodeType.Text:
36 | xmlValues.Add(xmlReader.Value);
37 | break;
38 | }
39 | }
40 |
41 | //Cleanly close the file
42 | xmlReader.Close();
43 | }
44 |
45 | //Read a key and a value from the XML file
46 | public string readXmlEntry(string key)
47 | {
48 | string returnString = null;
49 |
50 | //Check if the key element exists
51 | if (xmlElements.Contains(key))
52 | {
53 | returnString = xmlValues[xmlElements.IndexOf(key) - 1];
54 | }
55 |
56 | return returnString;
57 | }
58 |
59 | //Read a key and an int value from the XML file
60 | public int readXmlEntryInt(string key, int minValue, int maxValue)
61 | {
62 | int returnInt = 0;
63 | string returnString = null;
64 |
65 | //Check if the key element exists
66 | if (xmlElements.Contains(key))
67 | {
68 | returnString = xmlValues[xmlElements.IndexOf(key) - 1];
69 | }
70 |
71 | if (int.TryParse(returnString, out returnInt))
72 | {
73 | //Check if the value is lower then the minimum given value
74 | if (returnInt < minValue) returnInt = minValue;
75 |
76 | //Check if the value exceeds the maximum given value
77 | if (returnInt > maxValue) returnInt = maxValue;
78 | }
79 |
80 | return returnInt;
81 | }
82 |
83 | //In order to write to XML file this function needs to be called
84 | public void openXmlWriter(string fileName, string applicationComment)
85 | {
86 | xmlWriter = new XmlTextWriter(fileName, Encoding.UTF8);
87 |
88 | xmlWriter.WriteStartDocument();
89 | xmlWriter.WriteComment(applicationComment);
90 | xmlWriter.WriteStartElement("Settings");
91 | }
92 |
93 | //Write a value in the associated key
94 | public void writeXmlEntry(string key, string value)
95 | {
96 | xmlWriter.WriteStartElement(key);
97 | xmlWriter.WriteString(value);
98 | xmlWriter.WriteEndElement();
99 | }
100 |
101 | //When program is done writing to XML file clean close is needed
102 | public void closeXmlWriter()
103 | {
104 | xmlWriter.WriteEndElement();
105 | xmlWriter.WriteEndDocument();
106 | xmlWriter.Close();
107 | }
108 | }
109 | }
--------------------------------------------------------------------------------
/MemcardRex.Windows/MemcardRex.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net8.0-windows
4 | windows
5 | WinExe
6 | true
7 | win-x64
8 | false
9 | MemcardRex.Program
10 | Resources\memcardrex.ico
11 | publish\
12 | true
13 | Disk
14 | false
15 | Foreground
16 | 7
17 | Days
18 | false
19 | false
20 | true
21 | 0
22 | 1.0.0.%2a
23 | false
24 | true
25 | true
26 | true
27 | true
28 |
29 |
30 |
31 |
32 |
33 | app.manifest
34 |
35 |
36 | bin\x64\Debug\
37 | default
38 |
39 |
40 | bin\x64\Release\
41 | default
42 |
43 |
44 |
45 | Component
46 |
47 |
48 |
49 |
50 | False
51 | .NET Framework 3.5 SP1 Client Profile
52 | false
53 |
54 |
55 | False
56 | .NET Framework 2.0 %28x86%29
57 | false
58 |
59 |
60 | False
61 | .NET Framework 3.0 %28x86%29
62 | false
63 |
64 |
65 | False
66 | .NET Framework 3.5
67 | true
68 |
69 |
70 | False
71 | .NET Framework 3.5 SP1
72 | false
73 |
74 |
75 | False
76 | Windows Installer 3.1
77 | true
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/InfoDialogController.cs:
--------------------------------------------------------------------------------
1 | // This file has been autogenerated from a class added in the UI designer.
2 |
3 | using System;
4 | using System.Drawing;
5 | using Foundation;
6 | using AppKit;
7 | using MemcardRex.Core;
8 |
9 | namespace MemcardRex
10 | {
11 | public partial class InfoDialogController : NSViewController
12 | {
13 | #region Private Variables
14 | private string _dialogTitle = "";
15 | private string _saveTitle = "";
16 | private string _productCode = "";
17 | private string _identifier = "";
18 | private string _region = "";
19 | private int _frames = 0;
20 | private int _size = 0;
21 | private int[] _slots = new int[1];
22 | private Color[,][] _icons;
23 | private NSViewController _presentor;
24 | #endregion
25 |
26 | #region Computed Properties
27 | public string DialogTitle
28 | {
29 | get { return _dialogTitle; }
30 | set { _dialogTitle = value; }
31 | }
32 |
33 | public string SaveTitle
34 | {
35 | get { return _saveTitle; }
36 | set { _saveTitle = value; }
37 | }
38 |
39 | public string ProductCode
40 | {
41 | get { return _productCode; }
42 | set { _productCode = value; }
43 | }
44 |
45 | public string IdentifierString
46 | {
47 | get { return _identifier; }
48 | set { _identifier = value; }
49 | }
50 |
51 | public string Region
52 | {
53 | get { return _region; }
54 | set { _region = value; }
55 | }
56 |
57 | public int Size
58 | {
59 | get { return _size; }
60 | set { _size = value; }
61 | }
62 |
63 | public int Frames
64 | {
65 | get { return _frames; }
66 | set { _frames = value; }
67 | }
68 |
69 | public int[] Slots
70 | {
71 | get { return _slots; }
72 | set { _slots = value; }
73 | }
74 |
75 | public Color[,][] Icons
76 | {
77 | get { return _icons; }
78 | set { _icons = value; }
79 | }
80 |
81 | public NSViewController Presentor
82 | {
83 | get { return _presentor; }
84 | set { _presentor = value; }
85 | }
86 | #endregion
87 |
88 | public InfoDialogController (IntPtr handle) : base (handle)
89 | {
90 | }
91 |
92 | #region Override Methods
93 | public override void ViewWillAppear()
94 | {
95 | string ocupiedSlots = "";
96 |
97 | base.ViewWillAppear();
98 |
99 | this.View.Window.Title = DialogTitle;
100 |
101 | titleLabel.StringValue = SaveTitle;
102 | identifierLabel.StringValue = IdentifierString;
103 | productCodeLabel.StringValue = ProductCode;
104 | regionLabel.StringValue = Region;
105 | sizeLabel.StringValue = Size.ToString() + " KB";
106 | iconFramesLabel.StringValue = Frames.ToString();
107 |
108 | for (int i = 0; i < Slots.Length; i++)
109 | ocupiedSlots += (Slots[i] + 1).ToString() + ", ";
110 |
111 | //Show ocupied slots
112 | slotLabel.StringValue = ocupiedSlots.Remove(ocupiedSlots.Length - 2);
113 |
114 | //Prepare icons
115 | BmpBuilder bmpImage = new BmpBuilder();
116 |
117 | NSData imageData = NSData.FromArray(bmpImage.BuildBmp(Icons[Slots[0],0]));
118 | NSImage image = new NSImage(imageData);
119 | var newImage = new NSImage(new CoreGraphics.CGSize(48, 48));
120 | var targetRect = new CoreGraphics.CGRect(0, 0, 48, 48);
121 |
122 | image.Flipped = true;
123 |
124 | newImage.LockFocus();
125 | image.Draw(targetRect, CoreGraphics.CGRect.Empty, NSCompositingOperation.Copy, 1.0f);
126 | newImage.UnlockFocus();
127 |
128 | iconImage.Image = newImage;
129 |
130 | //Disable resizing of modal dialog
131 | this.View.Window.StyleMask &= ~NSWindowStyle.Resizable;
132 | }
133 | #endregion
134 |
135 | [Export("CloseDialog:")]
136 | void CloseDialoga(NSObject sender)
137 | {
138 | Presentor.DismissViewController(this);
139 | }
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/cardReaderWindow.designer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel;
3 |
4 | namespace MemcardRex
5 | {
6 | partial class cardReaderWindow
7 | {
8 | ///
9 | /// Required designer variable.
10 | ///
11 | private System.ComponentModel.IContainer components = null;
12 |
13 | ///
14 | /// Clean up any resources being used.
15 | ///
16 | /// true if managed resources should be disposed; otherwise, false.
17 | protected override void Dispose(bool disposing)
18 | {
19 | if (disposing && (components != null))
20 | {
21 | components.Dispose();
22 | }
23 | base.Dispose(disposing);
24 | }
25 |
26 | #region Windows Form Designer generated code
27 |
28 | ///
29 | /// Required method for Designer support - do not modify
30 | /// the contents of this method with the code editor.
31 | ///
32 | private void InitializeComponent()
33 | {
34 | this.abortButton = new System.Windows.Forms.Button();
35 | this.progressBar = new System.Windows.Forms.ProgressBar();
36 | this.deviceLabel = new System.Windows.Forms.Label();
37 | this.spacerLabel = new System.Windows.Forms.Label();
38 | this.SuspendLayout();
39 | //
40 | // abortButton
41 | //
42 | this.abortButton.Location = new System.Drawing.Point(228, 52);
43 | this.abortButton.Name = "abortButton";
44 | this.abortButton.Size = new System.Drawing.Size(76, 24);
45 | this.abortButton.TabIndex = 0;
46 | this.abortButton.Text = "Abort";
47 | this.abortButton.UseVisualStyleBackColor = true;
48 | this.abortButton.Click += new System.EventHandler(this.OKbutton_Click);
49 | //
50 | // progressBar
51 | //
52 | this.progressBar.Location = new System.Drawing.Point(4, 24);
53 | this.progressBar.Maximum = 1024;
54 | this.progressBar.Name = "progressBar";
55 | this.progressBar.Size = new System.Drawing.Size(300, 16);
56 | this.progressBar.TabIndex = 5;
57 | //
58 | // deviceLabel
59 | //
60 | this.deviceLabel.AutoSize = true;
61 | this.deviceLabel.Location = new System.Drawing.Point(4, 5);
62 | this.deviceLabel.Name = "deviceLabel";
63 | this.deviceLabel.Size = new System.Drawing.Size(106, 13);
64 | this.deviceLabel.TabIndex = 6;
65 | this.deviceLabel.Text = "infoLabelPlaceholder";
66 | this.deviceLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
67 | //
68 | // spacerLabel
69 | //
70 | this.spacerLabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
71 | this.spacerLabel.Location = new System.Drawing.Point(4, 46);
72 | this.spacerLabel.Name = "spacerLabel";
73 | this.spacerLabel.Size = new System.Drawing.Size(300, 2);
74 | this.spacerLabel.TabIndex = 9;
75 | //
76 | // cardReaderWindow
77 | //
78 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
79 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
80 | this.ClientSize = new System.Drawing.Size(308, 81);
81 | this.Controls.Add(this.spacerLabel);
82 | this.Controls.Add(this.deviceLabel);
83 | this.Controls.Add(this.progressBar);
84 | this.Controls.Add(this.abortButton);
85 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
86 | this.MaximizeBox = false;
87 | this.MinimizeBox = false;
88 | this.Name = "cardReaderWindow";
89 | this.ShowInTaskbar = false;
90 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
91 | this.Text = "cardReaderWindow";
92 | this.Load += new System.EventHandler(this.cardReaderWindow_Load);
93 | this.ResumeLayout(false);
94 | this.PerformLayout();
95 |
96 | }
97 | #endregion
98 |
99 | private System.Windows.Forms.Button abortButton;
100 | private System.Windows.Forms.ProgressBar progressBar;
101 | private System.Windows.Forms.Label deviceLabel;
102 | private System.Windows.Forms.Label spacerLabel;
103 | }
104 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MemcardRex
2 | ### Advanced PlayStation 1 Memory Card editor
3 | 
4 |
5 |
**Features:**
6 | * Tabbed interface - multiple Memory Cards can be opened at the same time.
7 | * Ability to copy, delete, restore, export, import and edit saves.
8 | * Plugin support for 3rd party save editors.
9 | * Hardware interfaces for communication with real Memory Cards.
10 | * PocketStation support (read serial, dump BIOS, push PC time)
11 |
12 |
**Requirements:**
13 | * .NET 8.
14 |
15 |
**Supported Memory Card formats:**
16 | * ePSXe/PSEmu Pro Memory Card(*.mcr)
17 | * DexDrive Memory Card(*.gme)
18 | * pSX/AdriPSX Memory Card(*.bin)
19 | * Bleem! Memory Card(*.mcd)
20 | * VGS Memory Card(*.mem, *.vgs)
21 | * PSXGame Edit Memory Card(*.mc)
22 | * DataDeck Memory Card(*.ddf)
23 | * WinPSM Memory Card(*.ps)
24 | * Smart Link Memory Card(*.psm)
25 | * MCExplorer(*.mci)
26 | * PCSX ReARMed/RetroArch(*.srm)
27 | * PSP virtual Memory Card(*.VMP)
28 | * PS3 virtual Memory Card(*.VM1)
29 | * PS Vita "MCX" PocketStation Memory Card(*.BIN)
30 | * POPStarter Virtual Memory Card(*.VMC)
31 |
32 |
**Supported single save formats:**
33 | * PSXGame Edit single save(*.mcs)
34 | * XP, AR, GS, Caetla single save(*.psx)
35 | * Memory Juggler(*.ps1)
36 | * Smart Link(*.mcb)
37 | * Datel(*.mcx,*.pda)
38 | * RAW single saves
39 | * PS3 virtual saves (*.psv)
40 |
41 | ### Hardware interfaces
42 | MemcardRex supports communication with the real Memory Cards via external devices.
43 |
Make sure to select a proper COM port in Options->Preferences.
44 |
45 |
46 | 1. DexDrive
47 | Original way of transferring data from MemoryCard to PC and vice versa albeit a little quirky.
48 |
If you encounter problems, unplug power from DexDrive, unplug it from COM port and connect it all again.
49 |
50 | It is recommended that a power cord is connected to DexDrive, otherwise some cards won't be detected.
51 |
Works with native COM port or USB based adapters.
52 |
53 |
54 |
55 |
56 | 2. MemCARDuino
57 | MemCARDuino is an open source Memory Card communication software for various Arduino boards.
58 | https://github.com/ShendoXT/memcarduino
59 |
60 |
61 |
62 |
63 | 3. PS1CardLink
64 | PS1CardLink is a software for the actual PlayStation and PSOne consoles.
65 |
It requires an official or home made TTL serial cable for communication with PC.
66 |
67 | With it your console becomes a Memory Card reader similar to the DexDrive and MemCARDuino.
68 |
69 | MemcardRex can also talk to the serial port remotely by using a Serial Port Bridge like [esp-link](https://github.com/jeelabs/esp-link).
70 |
It conveniently fits into a PSOne which has otherwise no external hardware ports.
71 |
https://github.com/ShendoXT/ps1cardlink
72 |
73 |
74 |
75 |
76 | 4. Unirom
77 | Unirom is a shell for the PlayStation and PSOne consoles.
78 |
It requires an official or home made TTL serial cable for communication with PC.
79 |
https://unirom.github.io.
80 |
81 |
82 |
83 |
84 | 5. PS3 Memory Card Adaptor
85 | The PS3 Memory Card Adaptor is an official Sony USB adapter that allows reading and writing PS1 Memory Cards on a PlayStation 3.
86 |
To use it on a Windows PC, a custom USB driver needs to be installed.
87 |
88 | This USB driver can be easily created and installed using [Zadig](https://zadig.akeo.ie) by following these steps:
89 | * Plug the PS3 Memory Card Adaptor into a free USB port and start Zadig.
90 | * Zadig should display the PS3 MCA as an "Unknown Device". Verify that the USB ID matches: 054C 02EA
91 | * Click the Edit checkbox and name the device "PS3 Memory Card Adaptor"
92 | * Ensure that "WinUSB" is selected from the list of Driver options and click the Install Driver button.
93 | - If you need LibUSB driver support place "libusb-1.0.dll" inside MemcardRex's directory (2.0 RC1 and up only).
94 | * After about 30 seconds Zadig should show a message that the driver was installed successfully.
95 |
96 | With the USB driver installed and the PS3 Memory Card Adaptor plugged in, you should now be able to read, write and format PS1 Memory Cards.
97 |
98 |
99 |
100 | ### Credits
101 | **Authors:**
102 |
Alvaro Tanarro, bitrot-alpha, lmiori92, Nico de Poel, KuromeSan, Robxnano, Shendo.
103 |
104 | **Beta testers:**
105 |
Gamesoul Master, Xtreme2damax, Carmax91 and NKO.
106 |
107 | **Thanks to:**
108 |
@ruantec, Cobalt, TheCloudOfSmoke, RedawgTS, Hard core Rikki, RainMotorsports, Zieg, Bobbi, OuTman, Kevstah2004, Kubusleonidas, Frédéric Brière, Mark James, Cor'e, DeadlySystem, Padraig Flood and Martin Korth (nocash).
109 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/preferencesWindow.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 | using System.IO.Ports;
4 | using System.Collections.Generic;
5 | using System.Runtime.Versioning;
6 |
7 | namespace MemcardRex
8 | {
9 | [SupportedOSPlatform("windows")]
10 | public partial class preferencesWindow : Form
11 | {
12 | //Window that hosted this dialog
13 | mainWindow hostWindow;
14 |
15 | //Saved Hardware COM port (in case it's a removable USB adapter)
16 | string SavedComPort = null;
17 |
18 | public preferencesWindow()
19 | {
20 | InitializeComponent();
21 | }
22 |
23 | //Load default values
24 | public void initializeDialog(mainWindow window, List registeredInterfaces)
25 | {
26 | hostWindow = window;
27 |
28 | backgroundCombo.SelectedIndex = hostWindow.appSettings.IconBackgroundColor;
29 | formatCombo.SelectedIndex = hostWindow.appSettings.FormatType;
30 | SavedComPort = hostWindow.appSettings.CommunicationPort;
31 | if (hostWindow.appSettings.ShowListGrid == 1) gridCheckbox.Checked = true; else gridCheckbox.Checked = false;
32 | if (hostWindow.appSettings.BackupMemcards == 1) backupCheckbox.Checked = true; else backupCheckbox.Checked = false;
33 | if (hostWindow.appSettings.RestoreWindowPosition == 1) restorePositionCheckbox.Checked = true; else restorePositionCheckbox.Checked = false;
34 | if (hostWindow.appSettings.FixCorruptedCards == 1) fixCorruptedCardsCheckbox.Checked = true; else fixCorruptedCardsCheckbox.Checked = false;
35 | if (hostWindow.appSettings.WarningMessages == 1) warningCheckBox.Checked = true; else warningCheckBox.Checked = false;
36 | remoteAddressBox.Text = hostWindow.appSettings.RemoteCommAddress;
37 | remotePortUpDown.Value = hostWindow.appSettings.RemoteCommPort;
38 | cardSlotCombo.SelectedIndex = hostWindow.appSettings.CardSlot;
39 |
40 | //Load all COM ports found on the system
41 | foreach (string port in SerialPort.GetPortNames())
42 | {
43 | dexDriveCombo.Items.Add(port);
44 | }
45 |
46 | //Load all available hardware interfaces
47 | foreach(mainWindow.HardInterfaces iface in registeredInterfaces)
48 | {
49 | hardwareInterfacesCombo.Items.Add(iface.displayName);
50 | }
51 |
52 | hardwareInterfacesCombo.SelectedIndex = hostWindow.appSettings.ActiveInterface;
53 |
54 | //If there are no ports disable combobox
55 | if(dexDriveCombo.Items.Count < 1) dexDriveCombo.Enabled = false;
56 |
57 | //Select a com port (if it exists)
58 | dexDriveCombo.SelectedItem = hostWindow.appSettings.CommunicationPort;
59 |
60 | this.ShowDialog(hostWindow);
61 | }
62 |
63 | //Apply configured settings
64 | private void applySettings()
65 | {
66 | hostWindow.appSettings.IconBackgroundColor = backgroundCombo.SelectedIndex;
67 | hostWindow.appSettings.FormatType = formatCombo.SelectedIndex;
68 | hostWindow.appSettings.CommunicationPort = SavedComPort;
69 | hostWindow.appSettings.RemoteCommAddress = remoteAddressBox.Text;
70 | hostWindow.appSettings.RemoteCommPort = Convert.ToUInt16(remotePortUpDown.Value);
71 | hostWindow.appSettings.ActiveInterface = hardwareInterfacesCombo.SelectedIndex;
72 | hostWindow.appSettings.CardSlot = cardSlotCombo.SelectedIndex;
73 |
74 | if (gridCheckbox.Checked) hostWindow.appSettings.ShowListGrid = 1; else hostWindow.appSettings.ShowListGrid = 0;
75 | if (backupCheckbox.Checked) hostWindow.appSettings.BackupMemcards = 1; else hostWindow.appSettings.BackupMemcards = 0;
76 | if (warningCheckBox.Checked) hostWindow.appSettings.WarningMessages = 1; else hostWindow.appSettings.WarningMessages = 0;
77 | if (restorePositionCheckbox.Checked) hostWindow.appSettings.RestoreWindowPosition = 1; else hostWindow.appSettings.RestoreWindowPosition = 0;
78 | if (fixCorruptedCardsCheckbox.Checked) hostWindow.appSettings.FixCorruptedCards = 1; else hostWindow.appSettings.FixCorruptedCards = 0;
79 |
80 | //hostWindow.appSettings.SaveSettings(hostWindow.appPath, hostWindow.appName, hostWindow.appVersion);
81 | }
82 |
83 | private void cancelButton_Click(object sender, EventArgs e)
84 | {
85 | this.Close();
86 | }
87 |
88 | private void okButton_Click(object sender, EventArgs e)
89 | {
90 | applySettings();
91 | this.Close();
92 | }
93 |
94 | private void dexDriveCombo_SelectedIndexChanged(object sender, EventArgs e)
95 | {
96 | //Save the COM port if the user selected a new one
97 | SavedComPort = dexDriveCombo.Text;
98 | }
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/GUI/ViewController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | [Register ("ViewController")]
13 | partial class ViewController
14 | {
15 | [Outlet]
16 | AppKit.NSClipView CardList { get; set; }
17 |
18 | [Outlet]
19 | AppKit.NSTableView CardTable { get; set; }
20 |
21 | [Outlet]
22 | AppKit.NSTextField ClickedLabel { get; set; }
23 |
24 | [Outlet]
25 | AppKit.NSMenuItem compareSaveItem { get; set; }
26 |
27 | [Outlet]
28 | AppKit.NSMenuItem cpyTempBufferItem { get; set; }
29 |
30 | [Outlet]
31 | AppKit.NSMenuItem deleteSaveItem { get; set; }
32 |
33 | [Outlet]
34 | AppKit.NSMenuItem editIconItem { get; set; }
35 |
36 | [Outlet]
37 | AppKit.NSMenuItem editSaveCommentItem { get; set; }
38 |
39 | [Outlet]
40 | AppKit.NSMenuItem editSaveHeaderItem { get; set; }
41 |
42 | [Outlet]
43 | AppKit.NSMenuItem exportSaveItem { get; set; }
44 |
45 | [Outlet]
46 | AppKit.NSMenuItem exportSaveRawItem { get; set; }
47 |
48 | [Outlet]
49 | AppKit.NSMenuItem getInfoItem { get; set; }
50 |
51 | [Outlet]
52 | AppKit.NSTableColumn IdentifierColumn { get; set; }
53 |
54 | [Outlet]
55 | AppKit.NSMenuItem importSaveItem { get; set; }
56 |
57 | [Outlet]
58 | AppKit.NSMenuItem pasteTempBufferItem { get; set; }
59 |
60 | [Outlet]
61 | AppKit.NSTableColumn ProductColumn { get; set; }
62 |
63 | [Outlet]
64 | AppKit.NSMenuItem removeSaveItem { get; set; }
65 |
66 | [Outlet]
67 | AppKit.NSMenuItem restoreSaveItem { get; set; }
68 |
69 | [Outlet]
70 | AppKit.NSTableColumn TitleColumn { get; set; }
71 |
72 | [Action ("compareTempBuffer:")]
73 | partial void compareTempBuffer (Foundation.NSObject sender);
74 |
75 | [Action ("copyToTempBuffer:")]
76 | partial void copyToTempBuffer (Foundation.NSObject sender);
77 |
78 | [Action ("deleteSave:")]
79 | partial void deleteSave (Foundation.NSObject sender);
80 |
81 | [Action ("editIcon:")]
82 | partial void editIcon (Foundation.NSObject sender);
83 |
84 | [Action ("editSaveComment:")]
85 | partial void editSaveComment (Foundation.NSObject sender);
86 |
87 | [Action ("exporrtSaveRaw:")]
88 | partial void exporrtSaveRaw (Foundation.NSObject sender);
89 |
90 | [Action ("exportSave:")]
91 | partial void exportSave (Foundation.NSObject sender);
92 |
93 | [Action ("getInfo:")]
94 | partial void getInfo (Foundation.NSObject sender);
95 |
96 | [Action ("importSave:")]
97 | partial void importSave (Foundation.NSObject sender);
98 |
99 | [Action ("pasteFromTempBuffer:")]
100 | partial void pasteFromTempBuffer (Foundation.NSObject sender);
101 |
102 | [Action ("removeSave:")]
103 | partial void removeSave (Foundation.NSObject sender);
104 |
105 | [Action ("restoreSave:")]
106 | partial void restoreSave (Foundation.NSObject sender);
107 |
108 | void ReleaseDesignerOutlets ()
109 | {
110 | if (CardList != null) {
111 | CardList.Dispose ();
112 | CardList = null;
113 | }
114 |
115 | if (CardTable != null) {
116 | CardTable.Dispose ();
117 | CardTable = null;
118 | }
119 |
120 | if (ClickedLabel != null) {
121 | ClickedLabel.Dispose ();
122 | ClickedLabel = null;
123 | }
124 |
125 | if (compareSaveItem != null) {
126 | compareSaveItem.Dispose ();
127 | compareSaveItem = null;
128 | }
129 |
130 | if (cpyTempBufferItem != null) {
131 | cpyTempBufferItem.Dispose ();
132 | cpyTempBufferItem = null;
133 | }
134 |
135 | if (deleteSaveItem != null) {
136 | deleteSaveItem.Dispose ();
137 | deleteSaveItem = null;
138 | }
139 |
140 | if (editIconItem != null) {
141 | editIconItem.Dispose ();
142 | editIconItem = null;
143 | }
144 |
145 | if (editSaveCommentItem != null) {
146 | editSaveCommentItem.Dispose ();
147 | editSaveCommentItem = null;
148 | }
149 |
150 | if (editSaveHeaderItem != null) {
151 | editSaveHeaderItem.Dispose ();
152 | editSaveHeaderItem = null;
153 | }
154 |
155 | if (exportSaveItem != null) {
156 | exportSaveItem.Dispose ();
157 | exportSaveItem = null;
158 | }
159 |
160 | if (exportSaveRawItem != null) {
161 | exportSaveRawItem.Dispose ();
162 | exportSaveRawItem = null;
163 | }
164 |
165 | if (getInfoItem != null) {
166 | getInfoItem.Dispose ();
167 | getInfoItem = null;
168 | }
169 |
170 | if (IdentifierColumn != null) {
171 | IdentifierColumn.Dispose ();
172 | IdentifierColumn = null;
173 | }
174 |
175 | if (importSaveItem != null) {
176 | importSaveItem.Dispose ();
177 | importSaveItem = null;
178 | }
179 |
180 | if (pasteTempBufferItem != null) {
181 | pasteTempBufferItem.Dispose ();
182 | pasteTempBufferItem = null;
183 | }
184 |
185 | if (ProductColumn != null) {
186 | ProductColumn.Dispose ();
187 | ProductColumn = null;
188 | }
189 |
190 | if (removeSaveItem != null) {
191 | removeSaveItem.Dispose ();
192 | removeSaveItem = null;
193 | }
194 |
195 | if (restoreSaveItem != null) {
196 | restoreSaveItem.Dispose ();
197 | restoreSaveItem = null;
198 | }
199 |
200 | if (TitleColumn != null) {
201 | TitleColumn.Dispose ();
202 | TitleColumn = null;
203 | }
204 | }
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/pocketStationInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.Drawing;
5 | using System.IO;
6 | using System.Runtime.Versioning;
7 | using System.Windows.Forms;
8 |
9 | namespace MemcardRex.Windows.GUI
10 | {
11 | [SupportedOSPlatform("windows")]
12 | public partial class pocketStationInfo : Form
13 | {
14 | private const string dialogName = "PocketStation info";
15 | private byte[] biosData;
16 |
17 | struct KnownReleases
18 | {
19 | public string _comment;
20 | public UInt32 _checksum;
21 |
22 | public KnownReleases(string comment, UInt32 checksum)
23 | {
24 | _comment = comment;
25 | _checksum = checksum;
26 | }
27 | }
28 |
29 | //Crete array of known releases
30 | static readonly IList releaseArray = new ReadOnlyCollection
31 | (new[] {
32 | new KnownReleases ("1st release", 0x27E94C07),
33 | new KnownReleases ("2nd release", 0xB16CE96C),
34 | new KnownReleases ("DTL-H4000", 0x1BABAF29)
35 | });
36 |
37 | public pocketStationInfo()
38 | {
39 | InitializeComponent();
40 | }
41 |
42 | private UInt32 calcChecksum()
43 | {
44 | UInt32 checkum = 0;
45 |
46 | for(int i = 0; i < biosData.Length; i+=4)
47 | checkum += (UInt32)(biosData[i] | biosData[i + 1] << 8 | biosData[i + 2] << 16 | biosData[i + 3] << 24);
48 |
49 | return checkum;
50 | }
51 |
52 | private void displaySerial(UInt32 serial)
53 | {
54 | //Get ascii character
55 | serialTextbox.Text = ((char)(serial >> 24)).ToString();
56 |
57 | //Get rest of the serial in BCD form
58 | serialTextbox.Text += ((serial & 0xFFFFFF)).ToString("D8");
59 | }
60 |
61 | private void displayRemark(UInt32 checksum)
62 | {
63 | remarkTextbox.Text = "";
64 |
65 | foreach(KnownReleases kRel in releaseArray)
66 | {
67 | if(checksum == kRel._checksum)
68 | {
69 | remarkTextbox.Text = kRel._comment;
70 | }
71 | }
72 |
73 | if (remarkTextbox.Text == "") remarkTextbox.Text = "Unknown / bad dump";
74 | }
75 |
76 | public void ShowSerial(UInt32 serial)
77 | {
78 | displaySerial(serial);
79 |
80 | this.Height = (int) (104 * CreateGraphics().DpiX / 96.0);
81 | this.Text = dialogName;
82 | this.ShowDialog();
83 | }
84 |
85 | //Show everything about the dumped BIOS
86 | public void ShowBios(UInt32 serial, byte[] bData)
87 | {
88 | biosData = bData;
89 | UInt32 checksum;
90 |
91 | //Enable BIOS specific controls
92 | versionLabel.Visible = true;
93 | versionTextbox.Visible = true;
94 |
95 | dateLabel.Visible = true;
96 | dateTextbox.Visible = true;
97 |
98 | checksumLabel.Visible = true;
99 | checksumTextbox.Visible = true;
100 |
101 | remarkLabel.Visible = true;
102 | remarkTextbox.Visible = true;
103 |
104 | saveButton.Visible = true;
105 |
106 | //Display date
107 | dateTextbox.Text = bData[0x17].ToString("X") + bData[0x16].ToString("X")
108 | + "/" + bData[0x15].ToString("X") + "/" + bData[0x14].ToString("X");
109 |
110 | //Display version
111 | versionTextbox.Text = "";
112 |
113 | //Kernel version
114 | for(int i = 0; i < 4; i++)
115 | versionTextbox.Text += ((char)bData[0x1DFC + i]).ToString();
116 |
117 | versionTextbox.Text += ", ";
118 |
119 | //GUI version
120 | for (int i = 0; i < 4; i++)
121 | versionTextbox.Text += ((char)bData[0x3FFC + i]).ToString();
122 |
123 | //Display checksum
124 | checksum = calcChecksum();
125 | checksumTextbox.Text = checksum.ToString("X8");
126 |
127 | displayRemark(checksum);
128 |
129 | displaySerial(serial);
130 | this.Text = dialogName;
131 | this.ShowDialog();
132 | }
133 |
134 | private void okButton_Click(object sender, EventArgs e)
135 | {
136 | this.Close();
137 | }
138 |
139 | //Save BIOS to a file
140 | private void saveButton_Click(object sender, EventArgs e)
141 | {
142 | SaveFileDialog saveFileDlg = new SaveFileDialog
143 | {
144 | Title = "Save PocketStation BIOS",
145 | Filter = "Binary image|bin.*",
146 | FileName = "BIOS.bin"
147 | };
148 |
149 | if(saveFileDlg.ShowDialog() != DialogResult.OK) return;
150 |
151 | try
152 | {
153 | BinaryWriter binWriter = new BinaryWriter(File.Open(saveFileDlg.FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None));
154 |
155 | binWriter.Write(biosData);
156 | binWriter.Close();
157 | }
158 | catch(Exception ex)
159 | {
160 | Console.WriteLine(ex.Message);
161 | }
162 | }
163 | }
164 | }
165 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/commentsWindow.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MemcardRex
2 | {
3 | partial class commentsWindow
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | commentsTextBox = new System.Windows.Forms.TextBox();
32 | warningLabel = new System.Windows.Forms.Label();
33 | cancelButton = new System.Windows.Forms.Button();
34 | okButton = new System.Windows.Forms.Button();
35 | spacerLabel = new System.Windows.Forms.Label();
36 | SuspendLayout();
37 | //
38 | // commentsTextBox
39 | //
40 | commentsTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
41 | commentsTextBox.Location = new System.Drawing.Point(4, 4);
42 | commentsTextBox.MaxLength = 255;
43 | commentsTextBox.Multiline = true;
44 | commentsTextBox.Name = "commentsTextBox";
45 | commentsTextBox.Size = new System.Drawing.Size(301, 100);
46 | commentsTextBox.TabIndex = 0;
47 | //
48 | // warningLabel
49 | //
50 | warningLabel.AutoSize = true;
51 | warningLabel.Location = new System.Drawing.Point(4, 108);
52 | warningLabel.Name = "warningLabel";
53 | warningLabel.Size = new System.Drawing.Size(299, 15);
54 | warningLabel.TabIndex = 10;
55 | warningLabel.Text = "Comments are only supported by DexDrive (.gme) files.";
56 | //
57 | // cancelButton
58 | //
59 | cancelButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
60 | cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
61 | cancelButton.Location = new System.Drawing.Point(229, 134);
62 | cancelButton.Name = "cancelButton";
63 | cancelButton.Size = new System.Drawing.Size(76, 23);
64 | cancelButton.TabIndex = 2;
65 | cancelButton.Text = "Cancel";
66 | cancelButton.UseVisualStyleBackColor = true;
67 | cancelButton.Click += cancelButton_Click;
68 | //
69 | // okButton
70 | //
71 | okButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
72 | okButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
73 | okButton.Location = new System.Drawing.Point(149, 134);
74 | okButton.Name = "okButton";
75 | okButton.Size = new System.Drawing.Size(76, 23);
76 | okButton.TabIndex = 1;
77 | okButton.Text = "OK";
78 | okButton.UseVisualStyleBackColor = true;
79 | okButton.Click += okButton_Click;
80 | //
81 | // spacerLabel
82 | //
83 | spacerLabel.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
84 | spacerLabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
85 | spacerLabel.Location = new System.Drawing.Point(4, 128);
86 | spacerLabel.Name = "spacerLabel";
87 | spacerLabel.Size = new System.Drawing.Size(301, 2);
88 | spacerLabel.TabIndex = 11;
89 | //
90 | // commentsWindow
91 | //
92 | AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
93 | AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
94 | ClientSize = new System.Drawing.Size(309, 161);
95 | Controls.Add(spacerLabel);
96 | Controls.Add(cancelButton);
97 | Controls.Add(okButton);
98 | Controls.Add(warningLabel);
99 | Controls.Add(commentsTextBox);
100 | FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
101 | MaximizeBox = false;
102 | MinimizeBox = false;
103 | Name = "commentsWindow";
104 | ShowInTaskbar = false;
105 | StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
106 | Text = "commentsWindow";
107 | ResumeLayout(false);
108 | PerformLayout();
109 | }
110 |
111 | #endregion
112 |
113 | private System.Windows.Forms.TextBox commentsTextBox;
114 | private System.Windows.Forms.Label warningLabel;
115 | private System.Windows.Forms.Button cancelButton;
116 | private System.Windows.Forms.Button okButton;
117 | private System.Windows.Forms.Label spacerLabel;
118 | }
119 | }
--------------------------------------------------------------------------------
/MemcardRex.macOS/macOS/AppDelegate.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Visual Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 | using System.CodeDom.Compiler;
9 |
10 | namespace MemcardRex
11 | {
12 | partial class AppDelegate
13 | {
14 | [Outlet]
15 | AppKit.NSMenuItem compareBufferMItem { get; set; }
16 |
17 | [Outlet]
18 | AppKit.NSMenuItem cpySaveTempBufferMItem { get; set; }
19 |
20 | [Outlet]
21 | AppKit.NSMenuItem deleteSaveMItem { get; set; }
22 |
23 | [Outlet]
24 | AppKit.NSMenuItem editIconMItem { get; set; }
25 |
26 | [Outlet]
27 | AppKit.NSMenuItem editSaveCommentMItem { get; set; }
28 |
29 | [Outlet]
30 | AppKit.NSMenuItem editSaveHeaderMItem { get; set; }
31 |
32 | [Outlet]
33 | AppKit.NSMenuItem exportSaveMItem { get; set; }
34 |
35 | [Outlet]
36 | AppKit.NSMenuItem exportSaveRawMItem { get; set; }
37 |
38 | [Outlet]
39 | AppKit.NSMenu hardFormatMenu { get; set; }
40 |
41 | [Outlet]
42 | AppKit.NSMenu hardReadMenu { get; set; }
43 |
44 | [Outlet]
45 | AppKit.NSMenu hardWriteMenu { get; set; }
46 |
47 | [Outlet]
48 | AppKit.NSMenuItem importSaveMItem { get; set; }
49 |
50 | [Outlet]
51 | AppKit.NSMenuItem pasteSaveTempBufferMItem { get; set; }
52 |
53 | [Outlet]
54 | AppKit.NSMenuItem redoMItem { get; set; }
55 |
56 | [Outlet]
57 | AppKit.NSMenuItem removeSaveMItem { get; set; }
58 |
59 | [Outlet]
60 | AppKit.NSMenuItem restoreSaveMItem { get; set; }
61 |
62 | [Outlet]
63 | AppKit.NSMenuItem undoMItem { get; set; }
64 |
65 | [Action ("cardlinkRead:")]
66 | partial void cardlinkRead (Foundation.NSObject sender);
67 |
68 | [Action ("cardlinkReadTcp:")]
69 | partial void cardlinkReadTcp (Foundation.NSObject sender);
70 |
71 | [Action ("compareTempBuffer:")]
72 | partial void compareTempBuffer (Foundation.NSObject sender);
73 |
74 | [Action ("copyToTempBuffer:")]
75 | partial void copyToTempBuffer (Foundation.NSObject sender);
76 |
77 | [Action ("deleteSave:")]
78 | partial void deleteSave (Foundation.NSObject sender);
79 |
80 | [Action ("dexdriveRead:")]
81 | partial void dexdriveRead (Foundation.NSObject sender);
82 |
83 | [Action ("dexDriveRead:")]
84 | partial void dexDriveRead (Foundation.NSObject sender);
85 |
86 | [Action ("editIcon:")]
87 | partial void editIcon (Foundation.NSObject sender);
88 |
89 | [Action ("editSaveComment:")]
90 | partial void editSaveComment (Foundation.NSObject sender);
91 |
92 | [Action ("exportSave:")]
93 | partial void exportSave (Foundation.NSObject sender);
94 |
95 | [Action ("exportSaveRaw:")]
96 | partial void exportSaveRaw (Foundation.NSObject sender);
97 |
98 | [Action ("importSave:")]
99 | partial void importSave (Foundation.NSObject sender);
100 |
101 | [Action ("memcarduinoRead:")]
102 | partial void memcarduinoRead (Foundation.NSObject sender);
103 |
104 | [Action ("pasteFromTempBuffer:")]
105 | partial void pasteFromTempBuffer (Foundation.NSObject sender);
106 |
107 | [Action ("redoOperation:")]
108 | partial void redoOperation (Foundation.NSObject sender);
109 |
110 | [Action ("removeSave:")]
111 | partial void removeSave (Foundation.NSObject sender);
112 |
113 | [Action ("restoreSave:")]
114 | partial void restoreSave (Foundation.NSObject sender);
115 |
116 | [Action ("undoOperation:")]
117 | partial void undoOperation (Foundation.NSObject sender);
118 |
119 | [Action ("uniromRead:")]
120 | partial void uniromRead (Foundation.NSObject sender);
121 |
122 | [Action ("uniromReadTcp:")]
123 | partial void uniromReadTcp (Foundation.NSObject sender);
124 |
125 | void ReleaseDesignerOutlets ()
126 | {
127 | if (compareBufferMItem != null) {
128 | compareBufferMItem.Dispose ();
129 | compareBufferMItem = null;
130 | }
131 |
132 | if (cpySaveTempBufferMItem != null) {
133 | cpySaveTempBufferMItem.Dispose ();
134 | cpySaveTempBufferMItem = null;
135 | }
136 |
137 | if (deleteSaveMItem != null) {
138 | deleteSaveMItem.Dispose ();
139 | deleteSaveMItem = null;
140 | }
141 |
142 | if (editIconMItem != null) {
143 | editIconMItem.Dispose ();
144 | editIconMItem = null;
145 | }
146 |
147 | if (editSaveCommentMItem != null) {
148 | editSaveCommentMItem.Dispose ();
149 | editSaveCommentMItem = null;
150 | }
151 |
152 | if (editSaveHeaderMItem != null) {
153 | editSaveHeaderMItem.Dispose ();
154 | editSaveHeaderMItem = null;
155 | }
156 |
157 | if (exportSaveMItem != null) {
158 | exportSaveMItem.Dispose ();
159 | exportSaveMItem = null;
160 | }
161 |
162 | if (exportSaveRawMItem != null) {
163 | exportSaveRawMItem.Dispose ();
164 | exportSaveRawMItem = null;
165 | }
166 |
167 | if (hardFormatMenu != null) {
168 | hardFormatMenu.Dispose ();
169 | hardFormatMenu = null;
170 | }
171 |
172 | if (hardReadMenu != null) {
173 | hardReadMenu.Dispose ();
174 | hardReadMenu = null;
175 | }
176 |
177 | if (hardWriteMenu != null) {
178 | hardWriteMenu.Dispose ();
179 | hardWriteMenu = null;
180 | }
181 |
182 | if (importSaveMItem != null) {
183 | importSaveMItem.Dispose ();
184 | importSaveMItem = null;
185 | }
186 |
187 | if (pasteSaveTempBufferMItem != null) {
188 | pasteSaveTempBufferMItem.Dispose ();
189 | pasteSaveTempBufferMItem = null;
190 | }
191 |
192 | if (redoMItem != null) {
193 | redoMItem.Dispose ();
194 | redoMItem = null;
195 | }
196 |
197 | if (removeSaveMItem != null) {
198 | removeSaveMItem.Dispose ();
199 | removeSaveMItem = null;
200 | }
201 |
202 | if (restoreSaveMItem != null) {
203 | restoreSaveMItem.Dispose ();
204 | restoreSaveMItem = null;
205 | }
206 |
207 | if (undoMItem != null) {
208 | undoMItem.Dispose ();
209 | undoMItem = null;
210 | }
211 | }
212 | }
213 | }
214 |
--------------------------------------------------------------------------------
/MemcardRex.Core/Hardware/HardwareInterface.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MemcardRex.Core
4 | {
5 | public class HardwareInterface
6 | {
7 | private Types _type;
8 | private Modes _mode;
9 | private CommModes _commMode;
10 | private int _cardSlot;
11 | private int _frameCount = 1024; //Default number of frames on a standard Memory Card
12 | private UInt32 _lastChecksum;
13 | private bool _storedInRam;
14 | private const string pocketstationError = "PocketStation commands are not supported by this interface";
15 |
16 | ///
17 | /// All supported interface types
18 | ///
19 | public enum Types : int
20 | {
21 | dexdrive,
22 | memcarduino,
23 | ps1cardlink,
24 | unirom,
25 | ps3mca
26 | };
27 |
28 | ///
29 | /// Supported operation modes
30 | ///
31 | public enum Modes : int
32 | {
33 | serial,
34 | tcp
35 | };
36 |
37 | ///
38 | /// Supported communication modes
39 | ///
40 | public enum CommModes : int
41 | {
42 | read,
43 | write,
44 | format,
45 | realtime,
46 | psinfo,
47 | psbios,
48 | pstime
49 | }
50 |
51 | ///
52 | /// Features supported by the
53 | ///
54 | public enum SupportedFeatures : int
55 | {
56 | TcpMode = 1, //Interface supports TCP protocol
57 | RealtimeMode = 1 << 1, //Fast reading of directories, updating in realtime
58 | PocketStation = 1 << 2 //Interface supports custom pocketstation commands
59 | }
60 |
61 | public Modes Mode
62 | {
63 | get { return _mode; }
64 | set { _mode = value; }
65 | }
66 |
67 | public CommModes CommMode
68 | {
69 | get { return _commMode; }
70 | set { _commMode = value; }
71 | }
72 |
73 | public int CardSlot
74 | {
75 | get { return _cardSlot; }
76 | set { _cardSlot = value; }
77 | }
78 |
79 | public int FrameCount
80 | {
81 | get { return _frameCount; }
82 | set { _frameCount = value; }
83 | }
84 |
85 | public UInt32 LastChecksum
86 | {
87 | get { return _lastChecksum; }
88 | set { _lastChecksum = value; }
89 | }
90 |
91 | public Types Type
92 | {
93 | get { return _type; }
94 | set { _type = value; }
95 | }
96 |
97 | public bool StoredInRam
98 | {
99 | get { return _storedInRam; }
100 | set { _storedInRam = value; }
101 | }
102 |
103 | public HardwareInterface()
104 | {
105 | //Set default values
106 | _mode = Modes.serial;
107 | _commMode = CommModes.read;
108 | }
109 |
110 | public UInt32 CalculateChecksum(byte[] inBytes)
111 | {
112 | UInt32 returnVal = 0;
113 | for (int i = 0; i < inBytes.Length; i++)
114 | {
115 | returnVal += (UInt32)inBytes[i];
116 | }
117 | return returnVal;
118 | }
119 |
120 | ///
121 | /// Init hardware interface
122 | ///
123 | /// Serial or TCP port
124 | /// Link speed
125 | /// Returns error message or null on success
126 | public virtual string Start(string port, int speed)
127 | {
128 | return "This interface is yet not supported";
129 | }
130 |
131 | ///
132 | /// Cleanly stop the interface
133 | ///
134 | public virtual void Stop()
135 | {
136 |
137 | }
138 |
139 | ///
140 | /// Return name of a device
141 | ///
142 | ///
143 | public virtual string Name()
144 | {
145 | return "Dummy interface";
146 | }
147 |
148 | ///
149 | /// Return firmware version of a device
150 | ///
151 | ///
152 | public virtual string Firmware()
153 | {
154 | return "";
155 | }
156 |
157 | ///
158 | /// Return all supported features of this interface
159 | ///
160 | ///
161 | public virtual SupportedFeatures Features()
162 | {
163 | return 0;
164 | }
165 |
166 | ///
167 | /// Read a single 128 byte frame from a device
168 | ///
169 | /// Frame to read
170 | ///
171 | public virtual byte[] ReadMemoryCardFrame(ushort FrameNumber)
172 | {
173 | return null;
174 | }
175 |
176 | ///
177 | /// Write a single 128 byte frame to a device
178 | ///
179 | /// Frame to write
180 | /// Data to write
181 | /// Returns success of the operation
182 | public virtual bool WriteMemoryCardFrame(ushort FrameNumber, byte[] FrameData)
183 | {
184 | return false;
185 | }
186 |
187 | ///
188 | /// Read serial from PocketStation
189 | ///
190 | /// Descriptive error message
191 | /// Serial as BCD
192 | public virtual UInt32 ReadPocketStationSerial(out string errorMsg)
193 | {
194 | errorMsg = pocketstationError;
195 | return 0;
196 | }
197 |
198 | ///
199 | /// Dump 16KB BIOS from PocketStation
200 | ///
201 | /// Part of the BIOS to dump
202 | /// 16KB BIOS data
203 | public virtual byte[] DumpPocketStationBIOS(int part)
204 | {
205 | return null;
206 | }
207 |
208 | ///
209 | /// Push current date and time from a PC to PocketStation
210 | ///
211 | /// Descriptive error message
212 | /// Operation success
213 | public virtual bool SetPocketStationTime(out string errorMsg)
214 | {
215 | errorMsg = pocketstationError;
216 | return false;
217 | }
218 | }
219 | }
220 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/commentsWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/headerWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/pocketStationInfo.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/preferencesWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/aboutWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/cardReaderWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/compareWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/pluginsWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/informationWindow.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/pluginsWindow.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MemcardRex
2 | {
3 | partial class pluginsWindow
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.OKbutton = new System.Windows.Forms.Button();
32 | this.aboutButton = new System.Windows.Forms.Button();
33 | this.configButton = new System.Windows.Forms.Button();
34 | this.pluginListView = new System.Windows.Forms.ListView();
35 | this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
36 | this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
37 | this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
38 | this.SuspendLayout();
39 | //
40 | // OKbutton
41 | //
42 | this.OKbutton.FlatStyle = System.Windows.Forms.FlatStyle.System;
43 | this.OKbutton.Location = new System.Drawing.Point(376, 256);
44 | this.OKbutton.Name = "OKbutton";
45 | this.OKbutton.Size = new System.Drawing.Size(76, 24);
46 | this.OKbutton.TabIndex = 0;
47 | this.OKbutton.Text = "OK";
48 | this.OKbutton.UseMnemonic = false;
49 | this.OKbutton.UseVisualStyleBackColor = true;
50 | this.OKbutton.Click += new System.EventHandler(this.OKbutton_Click);
51 | //
52 | // aboutButton
53 | //
54 | this.aboutButton.Location = new System.Drawing.Point(84, 256);
55 | this.aboutButton.Name = "aboutButton";
56 | this.aboutButton.Size = new System.Drawing.Size(76, 24);
57 | this.aboutButton.TabIndex = 3;
58 | this.aboutButton.Text = "About";
59 | this.aboutButton.UseVisualStyleBackColor = true;
60 | this.aboutButton.Click += new System.EventHandler(this.aboutButton_Click);
61 | //
62 | // configButton
63 | //
64 | this.configButton.Location = new System.Drawing.Point(4, 256);
65 | this.configButton.Name = "configButton";
66 | this.configButton.Size = new System.Drawing.Size(76, 24);
67 | this.configButton.TabIndex = 2;
68 | this.configButton.Text = "Config";
69 | this.configButton.UseVisualStyleBackColor = true;
70 | this.configButton.Click += new System.EventHandler(this.configButton_Click);
71 | //
72 | // pluginListView
73 | //
74 | this.pluginListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
75 | this.columnHeader1,
76 | this.columnHeader2,
77 | this.columnHeader3});
78 | this.pluginListView.FullRowSelect = true;
79 | this.pluginListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
80 | this.pluginListView.HideSelection = false;
81 | this.pluginListView.Location = new System.Drawing.Point(4, 4);
82 | this.pluginListView.MultiSelect = false;
83 | this.pluginListView.Name = "pluginListView";
84 | this.pluginListView.Size = new System.Drawing.Size(448, 248);
85 | this.pluginListView.TabIndex = 1;
86 | this.pluginListView.UseCompatibleStateImageBehavior = false;
87 | this.pluginListView.View = System.Windows.Forms.View.Details;
88 | this.pluginListView.SelectedIndexChanged += new System.EventHandler(this.pluginListView_SelectedIndexChanged);
89 | //
90 | // columnHeader1
91 | //
92 | this.columnHeader1.Text = "Plugin name";
93 | this.columnHeader1.Width = 131;
94 | //
95 | // columnHeader2
96 | //
97 | this.columnHeader2.Text = "Author";
98 | this.columnHeader2.Width = 92;
99 | //
100 | // columnHeader3
101 | //
102 | this.columnHeader3.Text = "Supported game(s)";
103 | this.columnHeader3.Width = 219;
104 | //
105 | // pluginsWindow
106 | //
107 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
108 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
109 | this.ClientSize = new System.Drawing.Size(456, 283);
110 | this.Controls.Add(this.pluginListView);
111 | this.Controls.Add(this.configButton);
112 | this.Controls.Add(this.aboutButton);
113 | this.Controls.Add(this.OKbutton);
114 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
115 | this.MaximizeBox = false;
116 | this.MinimizeBox = false;
117 | this.Name = "pluginsWindow";
118 | this.ShowInTaskbar = false;
119 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
120 | this.Text = "Plugins";
121 | this.ResumeLayout(false);
122 |
123 | }
124 |
125 | #endregion
126 |
127 | private System.Windows.Forms.Button OKbutton;
128 | private System.Windows.Forms.Button aboutButton;
129 | private System.Windows.Forms.Button configButton;
130 | private System.Windows.Forms.ListView pluginListView;
131 | private System.Windows.Forms.ColumnHeader columnHeader1;
132 | private System.Windows.Forms.ColumnHeader columnHeader2;
133 | private System.Windows.Forms.ColumnHeader columnHeader3;
134 | }
135 | }
--------------------------------------------------------------------------------
/MemcardRex.Core/Support/ProgramSettings.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 |
3 | namespace MemcardRex.Core
4 | {
5 | public class ProgramSettings
6 | {
7 | public int ShowListGrid = 0; //List grid settings
8 | public int IconBackgroundColor = 0; //Various colors based on PS1 BIOS backgrounds
9 | public int BackupMemcards = 0; //Backup Memory Card settings
10 | public int RestoreWindowPosition = 0; //Restore window position
11 | public int FixCorruptedCards = 0; //Try to fix corrupted memory cards
12 | public int FormatType = 0; //Type of formatting for hardware interfaces
13 | public string CommunicationPort = "COM1"; //Communication port for Hardware interfaces
14 | public int LastSaveFormat = 0; //Last used format to save memory card
15 | public int LastExportFormat = 0; //Last used format to export save
16 | public string RemoteCommAddress = "192.168.4.1"; //Address / hostname of the remote serial bridge host
17 | public int RemoteCommPort = 23; //Port to open a socket for the remote serial bridge
18 | public int CardSlot = 0; //Active card slot for reading data from PS1CardLink or Unirom
19 | public int ActiveInterface = 0; //Currently active hardware interface
20 | public int WarningMessages = 1; //Show warning messages for dangerous tasks
21 | public int WindowPositionX = 0; //Saved window X coordinate
22 | public int WindowPositionY = 0; //Saved window Y coordinate
23 | public int GridColorValue = 128; //Saved grid value for icon editor
24 | public int IconGridEnabled = 1; //Show grid in icon editor
25 |
26 | private const string settingsFilename = "Settings.xml";
27 |
28 | public ProgramSettings()
29 | {
30 | }
31 |
32 | ///
33 | /// Load settings from permanent storage
34 | ///
35 | /// Directory to save settings to
36 | public void LoadSettings(string directory)
37 | {
38 | if (!Directory.Exists(directory)) return;
39 |
40 | string filename = Path.Combine(directory, settingsFilename);
41 |
42 | if (!File.Exists(filename)) return;
43 |
44 | xmlSettingsEditor xmlAppSettings = new xmlSettingsEditor();
45 |
46 | //Open XML file for reading, file is auto-closed
47 | xmlAppSettings.openXmlReader(filename);
48 |
49 | ShowListGrid = xmlAppSettings.readXmlEntryInt("ShowGrid", 0, 1);
50 |
51 | CommunicationPort = xmlAppSettings.readXmlEntry("ComPort");
52 |
53 | RemoteCommAddress = xmlAppSettings.readXmlEntry("RemoteComAddress");
54 | RemoteCommPort = xmlAppSettings.readXmlEntryInt("RemoteComPort", 0, 65535);
55 |
56 | IconBackgroundColor = xmlAppSettings.readXmlEntryInt("IconBackgroundColor", 0, 4);
57 |
58 | BackupMemcards = xmlAppSettings.readXmlEntryInt("BackupMemoryCards", 0, 1);
59 |
60 | RestoreWindowPosition = xmlAppSettings.readXmlEntryInt("RestoreWindowPosition", 0, 1);
61 |
62 | WindowPositionX = xmlAppSettings.readXmlEntryInt("WindowPositionX", -65535, 65535);
63 |
64 | WindowPositionY = xmlAppSettings.readXmlEntryInt("WindowPositionY", -65535, 65535);
65 |
66 | FormatType = xmlAppSettings.readXmlEntryInt("HardwareFormatType", 0, 1);
67 |
68 | FixCorruptedCards = xmlAppSettings.readXmlEntryInt("FixCorruptedCards", 0, 1);
69 |
70 | LastSaveFormat = xmlAppSettings.readXmlEntryInt("LastSaveFormat", 0, 13);
71 |
72 | LastExportFormat = xmlAppSettings.readXmlEntryInt("LastExportFormat", 0, 7);
73 |
74 | CardSlot = xmlAppSettings.readXmlEntryInt("CardSlot", 0, 1);
75 |
76 | ActiveInterface = xmlAppSettings.readXmlEntryInt("ActiveInterface", 0, 10);
77 |
78 | WarningMessages = xmlAppSettings.readXmlEntryInt("WarningMessages", 0, 1);
79 |
80 | GridColorValue = xmlAppSettings.readXmlEntryInt("GridColorValue", 0, 255);
81 |
82 | IconGridEnabled = xmlAppSettings.readXmlEntryInt("IconGridEnabled", 0, 1);
83 | }
84 |
85 | ///
86 | /// Save settings to permanent storage
87 | ///
88 | /// Full path to settings file
89 | public void SaveSettings(string directory, string appName, string appVersion)
90 | {
91 | //Create directory if it doesn't exist
92 | if (!Directory.Exists(directory)) Directory.CreateDirectory(directory);
93 |
94 | xmlSettingsEditor xmlAppSettings = new xmlSettingsEditor();
95 |
96 | xmlAppSettings.openXmlWriter(Path.Combine(directory, settingsFilename), appName + " " + appVersion + " settings data");
97 |
98 | xmlAppSettings.writeXmlEntry("ShowGrid", ShowListGrid.ToString());
99 |
100 | xmlAppSettings.writeXmlEntry("ComPort", CommunicationPort);
101 |
102 | xmlAppSettings.writeXmlEntry("RemoteComAddress", RemoteCommAddress);
103 | xmlAppSettings.writeXmlEntry("RemoteComPort", RemoteCommPort.ToString());
104 |
105 | xmlAppSettings.writeXmlEntry("IconBackgroundColor", IconBackgroundColor.ToString());
106 |
107 | xmlAppSettings.writeXmlEntry("BackupMemoryCards", BackupMemcards.ToString());
108 |
109 | xmlAppSettings.writeXmlEntry("RestoreWindowPosition", RestoreWindowPosition.ToString());
110 |
111 | xmlAppSettings.writeXmlEntry("WindowPositionX", WindowPositionX.ToString());
112 |
113 | xmlAppSettings.writeXmlEntry("WindowPositionY", WindowPositionY.ToString());
114 |
115 | xmlAppSettings.writeXmlEntry("HardwareFormatType", FormatType.ToString());
116 |
117 | xmlAppSettings.writeXmlEntry("FixCorruptedCards", FixCorruptedCards.ToString());
118 |
119 | xmlAppSettings.writeXmlEntry("LastSaveFormat", LastSaveFormat.ToString());
120 |
121 | xmlAppSettings.writeXmlEntry("LastExportFormat", LastExportFormat.ToString());
122 |
123 | xmlAppSettings.writeXmlEntry("CardSlot", CardSlot.ToString());
124 |
125 | xmlAppSettings.writeXmlEntry("ActiveInterface", ActiveInterface.ToString());
126 |
127 | xmlAppSettings.writeXmlEntry("WarningMessages", WarningMessages.ToString());
128 |
129 | xmlAppSettings.writeXmlEntry("GridColorValue", GridColorValue.ToString());
130 |
131 | xmlAppSettings.writeXmlEntry("IconGridEnabled", IconGridEnabled.ToString());
132 |
133 | xmlAppSettings.closeXmlWriter();
134 | }
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/MemcardRex.Windows/Windows/GUI/compareWindow.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MemcardRex
2 | {
3 | partial class compareWindow
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.compareListView = new System.Windows.Forms.ListView();
32 | this.offsetColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
33 | this.save1Column = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
34 | this.save2Column = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
35 | this.save1Label = new System.Windows.Forms.Label();
36 | this.save2Label = new System.Windows.Forms.Label();
37 | this.spacerLabel = new System.Windows.Forms.Label();
38 | this.okButton = new System.Windows.Forms.Button();
39 | this.SuspendLayout();
40 | //
41 | // compareListView
42 | //
43 | this.compareListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
44 | this.offsetColumn,
45 | this.save1Column,
46 | this.save2Column});
47 | this.compareListView.FullRowSelect = true;
48 | this.compareListView.HideSelection = false;
49 | this.compareListView.Location = new System.Drawing.Point(4, 44);
50 | this.compareListView.MultiSelect = false;
51 | this.compareListView.Name = "compareListView";
52 | this.compareListView.Size = new System.Drawing.Size(368, 216);
53 | this.compareListView.TabIndex = 0;
54 | this.compareListView.UseCompatibleStateImageBehavior = false;
55 | this.compareListView.View = System.Windows.Forms.View.Details;
56 | //
57 | // offsetColumn
58 | //
59 | this.offsetColumn.Text = "Offset (hex, int)";
60 | this.offsetColumn.Width = 115;
61 | //
62 | // save1Column
63 | //
64 | this.save1Column.Text = "Save1 (hex, int)";
65 | this.save1Column.Width = 115;
66 | //
67 | // save2Column
68 | //
69 | this.save2Column.Text = "Save2 (hex, int)";
70 | this.save2Column.Width = 115;
71 | //
72 | // save1Label
73 | //
74 | this.save1Label.AutoSize = true;
75 | this.save1Label.Location = new System.Drawing.Point(4, 4);
76 | this.save1Label.Name = "save1Label";
77 | this.save1Label.Size = new System.Drawing.Size(62, 13);
78 | this.save1Label.TabIndex = 1;
79 | this.save1Label.Text = "save1Label";
80 | //
81 | // save2Label
82 | //
83 | this.save2Label.AutoSize = true;
84 | this.save2Label.Location = new System.Drawing.Point(4, 24);
85 | this.save2Label.Name = "save2Label";
86 | this.save2Label.Size = new System.Drawing.Size(64, 13);
87 | this.save2Label.TabIndex = 2;
88 | this.save2Label.Text = "save2Labell";
89 | //
90 | // spacerLabel
91 | //
92 | this.spacerLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
93 | this.spacerLabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
94 | this.spacerLabel.Location = new System.Drawing.Point(4, 265);
95 | this.spacerLabel.Name = "spacerLabel";
96 | this.spacerLabel.Size = new System.Drawing.Size(368, 2);
97 | this.spacerLabel.TabIndex = 11;
98 | //
99 | // okButton
100 | //
101 | this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
102 | this.okButton.Location = new System.Drawing.Point(296, 269);
103 | this.okButton.Name = "okButton";
104 | this.okButton.Size = new System.Drawing.Size(76, 24);
105 | this.okButton.TabIndex = 10;
106 | this.okButton.Text = "OK";
107 | this.okButton.UseVisualStyleBackColor = true;
108 | this.okButton.Click += new System.EventHandler(this.okButton_Click);
109 | //
110 | // compareWindow
111 | //
112 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
113 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
114 | this.ClientSize = new System.Drawing.Size(376, 297);
115 | this.Controls.Add(this.spacerLabel);
116 | this.Controls.Add(this.okButton);
117 | this.Controls.Add(this.save2Label);
118 | this.Controls.Add(this.save1Label);
119 | this.Controls.Add(this.compareListView);
120 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
121 | this.MaximizeBox = false;
122 | this.MinimizeBox = false;
123 | this.Name = "compareWindow";
124 | this.ShowInTaskbar = false;
125 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
126 | this.Text = "compareWindow";
127 | this.Load += new System.EventHandler(this.compareWindow_Load);
128 | this.ResumeLayout(false);
129 | this.PerformLayout();
130 |
131 | }
132 |
133 | #endregion
134 |
135 | private System.Windows.Forms.ListView compareListView;
136 | private System.Windows.Forms.ColumnHeader save1Column;
137 | private System.Windows.Forms.ColumnHeader save2Column;
138 | private System.Windows.Forms.ColumnHeader offsetColumn;
139 | private System.Windows.Forms.Label save1Label;
140 | private System.Windows.Forms.Label save2Label;
141 | private System.Windows.Forms.Label spacerLabel;
142 | private System.Windows.Forms.Button okButton;
143 | }
144 | }
--------------------------------------------------------------------------------
/MemcardRex.Core/Support/BmpBuilder.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 |
4 | namespace MemcardRex.Core
5 | {
6 | public class BmpBuilder
7 | {
8 | public BmpBuilder()
9 | {
10 | }
11 |
12 | byte ReverseBits(byte b)
13 | {
14 | byte reversed = 0;
15 | for (int i = 0; i < 8; i++)
16 | {
17 | // Shift the reversed byte to the left
18 | reversed <<= 1;
19 | // Get the least significant bit of the original byte and add it to the reversed byte
20 | reversed |= (byte)(b & 1);
21 | // Shift the original byte to the right
22 | b >>= 1;
23 | }
24 | return reversed;
25 | }
26 |
27 | ///
28 | /// Create a 32x32 monochrome BMP image
29 | ///
30 | ///
31 | ///
32 | public byte[] BuildBmp(byte[] RawImageData)
33 | {
34 | byte[] monoBmpHeader = {
35 | 0x42, 0x4D, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00,
36 | 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00,
37 | 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
38 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
40 | 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
51 | };
52 |
53 | byte[] monoBmpImage = new byte[190];
54 |
55 | //Copy BMP header to bmp data array
56 | Array.Copy(monoBmpHeader, monoBmpImage, monoBmpHeader.Length);
57 |
58 | for (int i = 0; i < 0x80; i += 4)
59 | {
60 | monoBmpImage[monoBmpImage.Length - 4 - i] = (byte)~ReverseBits(RawImageData[0 + i]);
61 | monoBmpImage[monoBmpImage.Length - 3 - i] = (byte)~ReverseBits(RawImageData[1 + i]);
62 | monoBmpImage[monoBmpImage.Length - 2 - i] = (byte)~ReverseBits(RawImageData[2 + i]);
63 | monoBmpImage[monoBmpImage.Length - 1 - i] = (byte)~ReverseBits(RawImageData[3 + i]);
64 | }
65 |
66 | return monoBmpImage;
67 | }
68 |
69 | ///
70 | /// Create 16x16 ARGB BMP image
71 | ///
72 | ///
73 | ///
74 | public byte[] BuildBmp(Color[] RawImageData)
75 | {
76 | byte[] ArgbBmpHeader = new byte[] // All values are little-endian
77 | {
78 | 0x42, 0x4D, // Signature 'BM'
79 | 0x8a, 0x40, 0x00, 0x00, // Size: 1162 bytes
80 | 0x00, 0x00, // Unused
81 | 0x00, 0x00, // Unused
82 | 0x8a, 0x00, 0x00, 0x00, // Offset to image data
83 |
84 | 0x7c, 0x00, 0x00, 0x00, // DIB header size (124 bytes)
85 | 0x10, 0x00, 0x00, 0x00, // Width (16px)
86 | 0x10, 0x00, 0x00, 0x00, // Height (16px)
87 | 0x01, 0x00, // Planes (1)
88 | 0x20, 0x00, // Bits per pixel (32)
89 | 0x03, 0x00, 0x00, 0x00, // Format (bitfield = use bitfields | no compression)
90 | 0x00, 0x04, 0x00, 0x00, // Image raw size (1024 bytes)
91 | 0x13, 0x0B, 0x00, 0x00, // Horizontal print resolution (2835 = 72dpi * 39.3701)
92 | 0x13, 0x0B, 0x00, 0x00, // Vertical print resolution (2835 = 72dpi * 39.3701)
93 | 0x00, 0x00, 0x00, 0x00, // Colors in palette (none)
94 | 0x00, 0x00, 0x00, 0x00, // Important colors (0 = all)
95 | 0x00, 0x00, 0xFF, 0x00, // R bitmask (00FF0000)
96 | 0x00, 0xFF, 0x00, 0x00, // G bitmask (0000FF00)
97 | 0xFF, 0x00, 0x00, 0x00, // B bitmask (000000FF)
98 | 0x00, 0x00, 0x00, 0xFF, // A bitmask (FF000000)
99 | 0x42, 0x47, 0x52, 0x73, // sRGB color space
100 |
101 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 | 0x00, 0x00, 0x00, 0x00, // Unused R, G, B entries for color space
106 |
107 | 0x00, 0x00, 0x00, 0x00, // Unused Gamma X entry for color space
108 | 0x00, 0x00, 0x00, 0x00, // Unused Gamma Y entry for color space
109 | 0x00, 0x00, 0x00, 0x00, // Unused Gamma Z entry for color space
110 |
111 | 0x00, 0x00, 0x00, 0x00, // Unknown
112 | 0x00, 0x00, 0x00, 0x00, // Unknown
113 | 0x00, 0x00, 0x00, 0x00, // Unknown
114 | 0x00, 0x00, 0x00, 0x00, // Unknown
115 | };
116 |
117 | const int totalSize = 1162;
118 | const int width = 16;
119 | const int dataOffset = 138;
120 |
121 | byte[] bmpImage = new byte[totalSize];
122 |
123 | // Copy BMP header
124 | Buffer.BlockCopy(ArgbBmpHeader, 0, bmpImage, 0, ArgbBmpHeader.Length);
125 |
126 | // Flip Y-axis directly when writing data
127 | for (int y = 0; y < width; y++)
128 | {
129 | int srcRowStart = y * width;
130 | int destRowStart = dataOffset + (width - 1 - y) * width * 4;
131 |
132 | for (int x = 0; x < width; x++)
133 | {
134 | Color pixel = RawImageData[srcRowStart + x];
135 | int destIndex = destRowStart + x * 4;
136 |
137 | // Write BGRA format directly (little-endian for BMP)
138 | bmpImage[destIndex] = pixel.B;
139 | bmpImage[destIndex + 1] = pixel.G;
140 | bmpImage[destIndex + 2] = pixel.R;
141 | bmpImage[destIndex + 3] = pixel.A;
142 | }
143 | }
144 |
145 | return bmpImage;
146 | }
147 | }
148 | }
149 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Oo]ut/
33 | [Ll]og/
34 | [Ll]ogs/
35 |
36 | # Visual Studio 2015/2017 cache/options directory
37 | .vs/
38 | # Uncomment if you have tasks that create the project's static files in wwwroot
39 | #wwwroot/
40 |
41 | # Visual Studio 2017 auto generated files
42 | Generated\ Files/
43 |
44 | # MSTest test Results
45 | [Tt]est[Rr]esult*/
46 | [Bb]uild[Ll]og.*
47 |
48 | # NUnit
49 | *.VisualState.xml
50 | TestResult.xml
51 | nunit-*.xml
52 |
53 | # Build Results of an ATL Project
54 | [Dd]ebugPS/
55 | [Rr]eleasePS/
56 | dlldata.c
57 |
58 | # Benchmark Results
59 | BenchmarkDotNet.Artifacts/
60 |
61 | # .NET Core
62 | project.lock.json
63 | project.fragment.lock.json
64 | artifacts/
65 |
66 | # ASP.NET Scaffolding
67 | ScaffoldingReadMe.txt
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio LightSwitch build output
298 | **/*.HTMLClient/GeneratedArtifacts
299 | **/*.DesktopClient/GeneratedArtifacts
300 | **/*.DesktopClient/ModelManifest.xml
301 | **/*.Server/GeneratedArtifacts
302 | **/*.Server/ModelManifest.xml
303 | _Pvt_Extensions
304 |
305 | # Paket dependency manager
306 | .paket/paket.exe
307 | paket-files/
308 |
309 | # FAKE - F# Make
310 | .fake/
311 |
312 | # CodeRush personal settings
313 | .cr/personal
314 |
315 | # Python Tools for Visual Studio (PTVS)
316 | __pycache__/
317 | *.pyc
318 |
319 | # Cake - Uncomment if you are using it
320 | # tools/**
321 | # !tools/packages.config
322 |
323 | # Tabs Studio
324 | *.tss
325 |
326 | # Telerik's JustMock configuration file
327 | *.jmconfig
328 |
329 | # BizTalk build output
330 | *.btp.cs
331 | *.btm.cs
332 | *.odx.cs
333 | *.xsd.cs
334 |
335 | # OpenCover UI analysis results
336 | OpenCover/
337 |
338 | # Azure Stream Analytics local run output
339 | ASALocalRun/
340 |
341 | # MSBuild Binary and Structured Log
342 | *.binlog
343 |
344 | # NVidia Nsight GPU debugger configuration file
345 | *.nvuser
346 |
347 | # MFractors (Xamarin productivity tool) working folder
348 | .mfractor/
349 |
350 | # Local History for Visual Studio
351 | .localhistory/
352 |
353 | # BeatPulse healthcheck temp database
354 | healthchecksdb
355 |
356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
357 | MigrationBackup/
358 |
359 | # Ionide (cross platform F# VS Code tools) working folder
360 | .ionide/
361 |
362 | # Fody - auto-generated XML schema
363 | FodyWeavers.xsd
364 | /MemcardRex/.DS_Store
365 | .DS_Store
366 | MemcardRex.macOS/Resources/.DS_Store
367 |
--------------------------------------------------------------------------------